Pure Kotlin barcode format detection, validation, and check digit calculation. No Android dependencies — works anywhere Kotlin runs.
- Format detection — auto-detect UPC-A, UPC-E, EAN-13, EAN-8, Code 128, QR Code, Codabar, ITF, PDF417, Data Matrix, and Aztec from a raw string
- Check digit validation — verify and strip check digits for UPC-A, UPC-E, EAN-13, EAN-8, and ITF
- Check digit calculation — generate correct check digits for new barcodes
- Codabar detection — pattern matching for Codabar start/stop characters
- Display ratios — standard height/width ratios for rendering barcodes in UI
- OCR text extraction — extract barcode values and expiry dates from raw OCR text with common misreading corrections
import com.simonshub.barcodeutils.BarcodeDetector
val format = BarcodeDetector.detect("012345678905")
// → BarcodeFormat.UPC_A
val qr = BarcodeDetector.detect("https://example.com")
// → BarcodeFormat.QR_CODE
val codabar = BarcodeDetector.detect("A12345B")
// → BarcodeFormat.CODABARimport com.simonshub.barcodeutils.BarcodeValidator
import com.simonshub.barcodeutils.BarcodeFormat
// Returns data without check digit, or null if invalid
val data = BarcodeValidator.stripCheckDigitIfValid("012345678905", BarcodeFormat.UPC_A)
// → "01234567890"
// Calculate a check digit
val check = BarcodeValidator.calculateCheckDigit("01234567890", BarcodeFormat.UPC_A)
// → '5'import com.simonshub.barcodeutils.BarcodeTextExtractor
val result = BarcodeTextExtractor.extract("Card Number: O12345678905\nExp: 05/26")
// result.barcode → "012345678905" (O corrected to 0)
// result.expiryDate → "0526"import com.simonshub.barcodeutils.BarcodeFormat
import com.simonshub.barcodeutils.targetDisplayRatio
val ratio = BarcodeFormat.QR_CODE.targetDisplayRatio() // → 1.0 (square)
val upcRatio = BarcodeFormat.UPC_A.targetDisplayRatio() // → 0.7| Method | Description |
|---|---|
detect(value: String): BarcodeFormat |
Auto-detect format from string value |
isLikelyCodabar(value: String): Boolean |
Check if string matches Codabar pattern |
| Method | Description |
|---|---|
isValid(value: String, format: BarcodeFormat): Boolean |
Validate value against format rules |
hasCheckDigit(format: BarcodeFormat): Boolean |
Whether format uses mandatory check digit |
stripCheckDigitIfValid(value: String, format: BarcodeFormat): String? |
Validate and strip check digit |
calculateCheckDigit(data: String, format: BarcodeFormat): Char? |
Calculate check digit for data |
| Method | Description |
|---|---|
extract(text: String): ExtractionResult |
Extract barcode + expiry date from OCR text |
splitIntoWords(line: String): List<String> |
Split line by whitespace |
UPC_A, UPC_E, EAN_13, EAN_8, CODE_128, CODE_39, PDF417, DATA_MATRIX, QR_CODE, CODABAR, ITF, AZTEC, UNKNOWN
Extension: BarcodeFormat.targetDisplayRatio(): Float — standard height/width ratio for rendering.
Copy the com.simonshub.barcodeutils package into your project, or include as a Gradle module dependency.
MIT License. See LICENSE for details.