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.
Use the standalone barcode use case
Added in BlinkID Web v8003.0.0, and in BlinkID Android and iOS v8002.0.0. Earlier v8xxx versions don't have use cases; follow Configure the session instead.
The standalone barcode use case builds session settings for barcode-only scanning in one call.
It disables all modules except barcodeModule, enables every supported barcode format, makes barcode presence mandatory, and scans a single side.
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
import { createBlinkId } from "@microblink/blinkid";
const blinkId = await createBlinkId({
licenseKey: "your-license-key",
presetScanningSettingsBuilder: (presetBuilder) =>
presetBuilder.buildStandaloneBarcodeSettings(),
});
BlinkIdCameraScanningScreen(
blinkIdSdk = blinkIdSdk,
sessionSettings = BlinkIdSessionSettings.standaloneBarcode(),
onScanningSuccess = { result -> /* handle result */ },
onScanningCanceled = { }
)
let analyzer = try await BlinkIDAnalyzer(
sdk: sdk,
blinkIdSessionSettings: BlinkIDSessionSettings.standaloneBarcode()
)
To read only the barcode of a detected document, rather than any barcode in the frame, use the document video use case with the barcode-only scenario.
Configure the session
Applies to versions earlier than BlinkID Web v8003.0.0, and BlinkID Android and iOS v8002.0.0. If you have a newer version, you can also use the standalone barcode use case.
Disable documentCaptureModule, mrzModule, and vizModule by setting each to null (web, Android) or nil (iOS).
Leave barcodeModule enabled.
On Flutter and React Native, modules you leave out of the scanning settings are disabled, so set only barcodeModule.
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
- Flutter (Dart)
- React Native (TS)
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
)
import 'package:blinkid_flutter/blinkid_flutter.dart';
final sessionSettings = BlinkIdSessionSettings(
scanningSettings: BlinkIdScanningSettings(
barcodeModule: BarcodeModuleSettings(),
),
);
import { performScan } from "@microblink/blinkid-react-native";
const result = await performScan({
sdkSettings: { licenseKey: "your-license-key" },
sessionSettings: {
scanningSettings: {
barcodeModule: {},
},
},
});
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)
- Flutter (Dart)
- React Native (TS)
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)
}
}
)
final barcode = result?.subResults?.first.barcode;
// Raw barcode string
print("Barcode string: ${barcode?.barcodeData?.stringData}");
print("Barcode type: ${barcode?.barcodeData?.barcodeType}");
print("Parsed: ${barcode?.parsed}");
// Parsed fields (populated for AAMVA-compliant documents)
if (barcode != null && barcode.parsed == true) {
print("First name: ${barcode.firstName}");
print("Last name: ${barcode.lastName}");
print("Date of birth: ${barcode.dateOfBirth?.originalString}");
print("Document number: ${barcode.documentNumber}");
}
const barcode = result.subResults?.[0]?.barcode;
// Raw barcode string
console.log("Barcode string:", barcode?.barcodeData?.stringData);
console.log("Barcode type:", barcode?.barcodeData?.barcodeType);
console.log("Parsed:", barcode?.parsed);
// Parsed fields (populated for AAMVA-compliant documents)
if (barcode?.parsed) {
console.log("First name:", barcode.firstName);
console.log("Last name:", barcode.lastName);
console.log("Date of birth:", barcode.dateOfBirth?.originalString);
console.log("Document number:", barcode.documentNumber);
}