---
Source: https://docs.microblink.com/blinkid/v8000/scan-barcodes
Title: Scan barcodes
Description: How to use BlinkID as a barcode scanner only
---

# Scan barcodes

By default, BlinkID runs all four [extraction modules](scanning-settings.md).

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, and Data Matrix.

:::note

`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.

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  import { createBlinkId } from "@microblink/blinkid";

  const blinkId = await createBlinkId({
    licenseKey: "your-license-key",
    scanningSettings: {
      documentCaptureModule: null,
      mrzModule: null,
      vizModule: null,
    },
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  BlinkIdCameraScanningScreen(
      blinkIdSdk = blinkIdSdk,
      sessionSettings = BlinkIdSessionSettings(
          scanningSettings = ScanningSettings(
              documentCaptureModule = null,
              mrzModule = null,
              vizModule = null,
          )
      ),
      onScanningSuccess = { result -> /* handle result */ },
      onScanningCanceled = { }
  )
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  let sessionSettings = BlinkIDSessionSettings(
      scanningSettings: ScanningSettings(
          documentCaptureModule: nil,
          mrzModule: nil,
          vizModule: nil,
      )
  )

  let analyzer = try await BlinkIDAnalyzer(
      sdk: sdk,
      blinkIdSessionSettings: sessionSettings
  )
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  import 'package:blinkid_flutter/blinkid_flutter.dart';

  final sessionSettings = BlinkIdSessionSettings(
    scanningSettings: BlinkIdScanningSettings(
      documentCaptureModule: null,
      mrzModule: null,
      vizModule: null,
    ),
  );
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  import { performScan } from "@microblink/blinkid-react-native";

  const result = await performScan({
    sdkSettings: { licenseKey: "your-license-key" },
    sessionSettings: {
      scanningSettings: {
        documentCaptureModule: null,
        mrzModule: null,
        vizModule: null,
      },
    },
  });
  ```

  </TabItem>
</Tabs>

## 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.

{/* TODO: review the correctness of these fields */}

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  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();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  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}")
      }
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  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)
          }
      }
  )
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    final side = result.subResults!.first;

    // Raw barcode string
    print("Barcode string: ${side.barcode?.barcodeData?.stringData}");
    print("Barcode type: ${side.barcode?.barcodeData?.barcodeType}");
    print("Parsed: ${side.barcode?.parsed}");

    // Parsed fields (populated for AAMVA-compliant documents)
    if (side.barcode?.parsed == true) {
      final barcode = side.barcode;
      print("First name: ${barcode?.firstName}");
      print("Last name: ${barcode?.lastName}");
      print("Date of birth: ${barcode?.dateOfBirth?.date}");
      print("Document number: ${barcode?.documentNumber}");
    }
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  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?.date);
    console.log("Document number:", side.barcode.documentNumber);
  }
  ```

  </TabItem>
</Tabs>

## Related articles

- [Scanning settings](scanning-settings.md)
- [BlinkID settings validation](settings-validation.md)


Last updated on Jul 24, 2026
