Dev Center
Table of contents

Scan and parse PDF417 on AAMVA documents

The PDF417 barcode on an AAMVA compatible driver’s license contains a lot of information which is encoded following the DL/ID Card Design Standard. In this article, we explore how to read and extract the information.

Read the barcode

The first step is to get the encrypted information as raw string from the barcode. The following code shows how to do this with DBR.

  • Javascript
let scanner = null;
let rawString = null;
Dynamsoft.DBR.BarcodeReader.license = 'DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9';
(async () => {
    document.getElementById("input-to-fill").addEventListener('click', async function () {
        try {
            scanner = scanner || await Dynamsoft.DBR.BarcodeScanner.createInstance();
            // Uses the built-in template "dense" meant for dense barcodes such as the ones found on driver licenses.
            await scanner.updateRuntimeSettings("dense");
            let settings = await scanner.getRuntimeSettings();
            // Sets the barcode type to PDF417.
            settings.barcodeFormatIds = Dynamsoft.DBR.EnumBarcodeFormat.BF_PDF417;
            // Sets the scale-up mode.
            rs.scaleUpModes[0] = Dynamsoft.DBR.EnumScaleUpMode.SUM_LINEAR_INTERPOLATION;
            await scanner.updateRuntimeSettings(settings);
            // Fine-tunes some arguments of the first mode in `scaleUpModes`
            scanner.setModeArgument("scaleUpModes", 0, "AcuteAngleWithXThreshold", "0");
            scanner.setModeArgument("scaleUpModes", 0, "ModuleSizeThreshold", "3");
            scanner.setModeArgument("scaleUpModes", 0, "TargetModuleSize", "8");
            scanner.onUniqueRead = (txt, result) => {
                rawString = txt;
            };
            await scanner.show();
            // Sets a high resolution so that the dense barcode gets recognized easier
            await scanner.setResolution(1920, 1080);
        } catch (ex) {
            alert(ex.message);
            throw ex;
        }
    });
})();

Now we have the original encoded data (rawString), the next step is to parse it to extract useful information.

Parse the data string

The encoded data is not readable, therefore, we parse it to extract the actual information we need. The following code shows how this is done.

  • Javascript
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-code-parser@1.1.0/dist/dcp.js"></script>
<script>
let parser = null;
Dynamsoft.DCP.CodeParser.license ='DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9';
(async () => {
    try {
        let parser = await Dynamsoft.DCP.CodeParser.createInstance();
        parser.setCodeFormat(Dynamsoft.DCP.EnumCodeFormat.CF_DL_AAMVA);
        // Parses the raw data retrieved from the barcode
        let info = await parser.parseData(rawString);
        // Checks the readable information in the console
        console.log(JSON.stringify(info));
    } catch (ex) {
        alert(ex.message);
        throw ex;
    }
})();
</script>

If you are using the JavaScript edition, also check out:

This page is compatible for:

Is this page helpful?

YesYes NoNo

In this article:

latest version

    • Latest version
    • Version 10.x
      • Version 10.2.0
      • Version 10.0.21
      • Version 10.0.20
      • Version 10.0.10
      • Version 10.0.0
    • Version 9.x
      • Version 9.6.42
      • Version 9.6.40
      • Version 9.6.33
      • Version 9.6.32
      • Version 9.6.31
      • Version 9.6.30
      • Version 9.6.20
      • Version 9.6.10
      • Version 9.6.0
      • Version 9.4.0
      • Version 9.2.0
      • Version 9.0.0
    • Version 8.x
      • Version 8.8.0
      • Version 8.6.0
      • Version 8.4.0
      • Version 8.2.0
      • Version 8.1.2
      • Version 8.1.0
      • Version 8.0.0
    • Version 7.x
      • Version 7.6.0
      • Version 7.5.0
    Change +