Scan barcodes
By default, BlinkID runs all four extraction modules.
To use BlinkID as a standalone barcode scanner, disable all the modules except barcodeModule.
When documentCaptureModule is disabled, additional barcode formats that are otherwise unavailable become enabled: UPC-E, UPC-A, Code 128, Code 39, EAN-8, EAN-13, ITF, Data Matrix, and Aztec.
pdf417ScanningEnabled and qrScanningEnabled must always be enabled or disabled together.
Configure the session
Disable documentCaptureModule, mrzModule, and vizModule by setting each to null (web, Android) or nil (iOS).
Leave barcodeModule enabled.
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
import { createBlinkId } from "@microblink/blinkid";
const blinkId = await createBlinkId({
licenseKey: "your-license-key",
scanningSettings: {
documentCaptureModule: null,
mrzModule: null,
vizModule: null,
},
});
BlinkIdCameraScanningScreen(
blinkIdSdk = blinkIdSdk,
sessionSettings = BlinkIdSessionSettings(
scanningSettings = ScanningSettings(
documentCaptureModule = null,
mrzModule = null,
vizModule = null,
)
),
onScanningSuccess = { result -> /* handle result */ },
onScanningCanceled = { }
)
let sessionSettings = BlinkIDSessionSettings(
scanningSettings: ScanningSettings(
documentCaptureModule: nil,
mrzModule: nil,
vizModule: nil,
)
)
let analyzer = try await BlinkIDAnalyzer(
sdk: sdk,
blinkIdSessionSettings: sessionSettings
)
Read the result
The barcode result is available on the per-side sub-result.
barcodeData contains the raw bytes and the decoded string.
For driver's licenses and other AAMVA-compliant documents, the barcode data is also parsed into structured fields.
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
blinkId.addOnResultCallback((result) => {
const side = result.subResults[0];
// Raw barcode string
console.log("Barcode string:", side.barcode?.barcodeData.stringData);
console.log("Barcode type:", side.barcode?.barcodeData.barcodeType);
console.log("Parsed:", side.barcode?.parsed);
// Parsed fields (populated for AAMVA-compliant documents)
if (side.barcode?.parsed) {
console.log("First name:", side.barcode.firstName);
console.log("Last name:", side.barcode.lastName);
console.log("Date of birth:", side.barcode.dateOfBirth?.gregorian);
console.log("Document number:", side.barcode.documentNumber);
}
void blinkId.destroy();
});
onScanningSuccess = { result ->
val side = result.subResults[0]
// Raw barcode string
println("Barcode string: ${side.barcode?.barcodeData?.stringData}")
println("Barcode type: ${side.barcode?.barcodeData?.barcodeType}")
println("Parsed: ${side.barcode?.parsed}")
// Parsed fields (populated for AAMVA-compliant documents)
if (side.barcode?.parsed == true) {
val barcode = side.barcode
println("First name: ${barcode.firstName}")
println("Last name: ${barcode.lastName}")
println("Date of birth: ${barcode.dateOfBirth?.gregorian}")
println("Document number: ${barcode.documentNumber}")
}
}
BlinkIDUXView(
analyzer: analyzer,
onScanCompleted: { resultState in
guard let result = resultState.scanningResult else { return }
let side = result.subResults[0]
// Raw barcode string
print("Barcode string:", side.barcode?.barcodeData.stringData ?? "")
print("Barcode type:", side.barcode?.barcodeData.barcodeType as Any)
print("Parsed:", side.barcode?.parsed as Any)
// Parsed fields (populated for AAMVA-compliant documents)
if side.barcode?.parsed == true, let barcode = side.barcode {
print("First name:", barcode.firstName)
print("Last name:", barcode.lastName)
print("Date of birth:", barcode.dateOfBirth.gregorian as Any)
print("Document number:", barcode.documentNumber)
}
}
)