Core barcode encoding/decoding library supporting 17 formats including QR Code, Data Matrix, Aztec, PDF 417, and various 1D barcodes
—
ZXing (Zebra Crossing) Core is a comprehensive Java barcode library supporting 17 formats including QR Code, Data Matrix, Aztec, PDF 417, and various 1D barcodes. Zero external dependencies, designed for desktop, mobile, and web applications.
com.google.zxing:core:3.5.4<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.4</version>
</dependency>Decode a barcode:
import com.google.zxing.*;
import com.google.zxing.common.*;
// Convert image to luminance source
LuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
// Decode
Reader reader = new MultiFormatReader();
Result result = reader.decode(bitmap);
String text = result.getText();Encode a QR code:
import com.google.zxing.*;
import com.google.zxing.common.BitMatrix;
Writer writer = new MultiFormatWriter();
BitMatrix matrix = writer.encode("Hello", BarcodeFormat.QR_CODE, 300, 300);2D Barcodes: QR Code, Data Matrix, Aztec, PDF417, MaxiCode
1D Barcodes: Code 39/93/128, EAN-8/13, UPC-A/E, ITF, Codabar, RSS
Image → LuminanceSource → Binarizer → BinaryBitmap → Reader → Result
Data → Writer → BitMatrix → ImageKey Components:
| Class | Purpose | Package |
|---|---|---|
MultiFormatReader | Decode any format | com.google.zxing |
MultiFormatWriter | Encode any format | com.google.zxing |
QRCodeReader/Writer | QR Code specific | com.google.zxing.qrcode |
RGBLuminanceSource | Convert RGB images | com.google.zxing |
HybridBinarizer | Adaptive binarization | com.google.zxing.common |
BinaryBitmap | Binary representation | com.google.zxing |
Result | Decode result | com.google.zxing |
BitMatrix | Encode result | com.google.zxing.common |
// Camera preview → YUV luminance source
PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(
yuvData, width, height, 0, 0, width, height, false);Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");ParsedResult parsed = ResultParser.parseResult(result);
if (parsed.getType() == ParsedResultType.WIFI) {
WifiParsedResult wifi = (WifiParsedResult) parsed;
// Use wifi.getSsid(), wifi.getPassword(), etc.
}POSSIBLE_FORMATS - Limit to specific formats (faster)TRY_HARDER - More thorough scanning (slower)CHARACTER_SET - Expected encoding (e.g., "UTF-8")PURE_BARCODE - Clean image with no border (faster)ERROR_CORRECTION - Error correction level (format-specific)CHARACTER_SET - Text encodingMARGIN - Quiet zone size in pixelsQR_VERSION - Force specific QR version (1-40)→ Complete Configuration Reference
try {
Result result = reader.decode(bitmap);
} catch (NotFoundException e) {
// No barcode found (common during scanning)
} catch (ChecksumException e) {
// Barcode damaged or corrupted
} catch (FormatException e) {
// Invalid barcode structure
}com.google.zxing
├── (root) # Core interfaces: Reader, Writer, Result
├── common # BitMatrix, Binarizer, utilities
├── qrcode # QR Code implementation
├── datamatrix # Data Matrix implementation
├── pdf417 # PDF417 implementation
├── aztec # Aztec Code implementation
├── maxicode # MaxiCode implementation
├── oned # 1D barcode implementations
├── multi # Multiple barcode detection
└── client.result # Result parsing (WiFi, vCard, etc.)| Format | Type | Capacity | Use Case |
|---|---|---|---|
| QR Code | 2D | 7,089 numeric | URLs, mobile, general |
| Data Matrix | 2D | 3,116 numeric | Small items, electronics |
| PDF417 | 2D | 1,850 alphanumeric | IDs, transportation |
| Aztec | 2D | 3,832 numeric | Tickets, no quiet zone |
| Code 128 | 1D | Variable | Shipping, packaging |
| EAN-13 | 1D | 13 digits | Retail products |
| UPC-A | 1D | 12 digits | North America retail |
POSSIBLE_FORMATS hint to limit format detectionPlanarYUVLuminanceSource for camera data (fastest)TRY_HARDER for real-time video scanningHybridBinarizer for varying lighting (recommended)CHARACTER_SET to "UTF-8" for international textMobile Scanner: Continuous camera scanning with throttling
Batch Processing: Extract all barcodes from documents
WiFi QR Generator: Generate WiFi connection QR codes
Product Scanner: Scan UPC/EAN with validation
Shipping Labels: Generate Code 128 barcodes
NotFoundException - No barcode found:
TRY_HARDER hintCharacter encoding issues:
CHARACTER_SET hint to "UTF-8"StringUtils.guessEncoding() for detectionQR code too small:
MARGIN hint (default is 4 modules)