What data do American and Canadian driver’s licenses contain?
Driver’s licenses are widely used as proof of identity in the United States and Canada. The American Association of Motor Vehicle Administrators (AAMVA) and Department of Motor Vehicles (DMV) offices have standardized the design of these documents and the information they contain. This data is encoded in a PDF417 barcode on the back, which can be read using a barcode reader. However, a parser (or API) is required to decode the raw data into a human-readable format.
But what information can you actually extract? Here are the mandatory driver’s license data elements on AAMVA documents. The three letters in front are the data item’s corresponding element ID:
- DCA: Vehicle class(es) the cardholder is allowed to drive
- DCB: Restrictions on driving privileges (e.g., only automatic transmission)
- DCD: Additional privileges granted to the cardholder (e.g., transportation of hazardous material)
- DBA: Expiration date of the document
- DCS: Last name / family name
- DAC: First name
- DAD: Middle name(s)
- DBD: Issue date of the document
- DBB: Date of birth
- DBC: Gender
- DAY: Eye color
- DAU: Height
- DAG: Address: Street name
- DAI: Address: City name
- DAJ: Address: State name
- DAK: Address: Postal code
- DAQ: ID number of the cardholder
- DCF: ID number of the document
- DCG: Country in which the document was issued
- DDE: Indicator that the last name is truncated
- DDF: Indicator that the first name is truncated
- DDG: Indicator that the middle name(s) are truncated
What is PDF417?
All information above, including the license number and other ID card details, is encoded by a single PDF417 barcode on the back of a driver’s license, which can be read accurately in a single scan. This 2D barcode, similar to a QR code in principle, is actually composed of multiple linear barcodes stacked on top of each other. It has a start pattern (left) and an end pattern (right), with the information itself encoded in the middle section.

A barcode scanner linked to a data parser can decode the information encoded by a PDF417 barcode to be easily readable by humans. This makes it easy to quickly find relevant fields such as a customer’s date of birth or credit card information. If the data is fed into a backend API, it can be used to automatically populate text fields, e.g., on an application form. This is not only much faster than manual data entry, it also prevents mistakes.
Use a Driver’s License Scanner to automate your workflows
With the US Driver’s License Scanner by Scanbot SDK, you can easily and reliably decode information from PDF417 barcodes on ID cards and driver’s licenses. The data is transformed into key-value pairs to improve readability and facilitate backend processing.

Whether you need to verify the age of your customer or record their name and address, a quick scan of their driving license saves time and prevents mistakes.
Security is another consideration: While the text on the document can be tampered with, it is much harder to change the information encoded in the PDF417 code. This means that using the Driver’s License scanning functionality not only increases efficiency, but also security. It can be integrated into workflows across various industries and make processes like customer onboarding and fleet management seamless and accurate.
With the Scanbot SDK’s Ready-to-Use UI Components, you can set up a fully functional driver’s license scanner app with just a few lines of code – even in a single, self-contained HTML file, thanks to the Scanbot Web Barcode Scanner SDK. Take a look:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>AAMVA Barcode Parser</title>
</head>
<body style="margin: 0">
<button id="start-scanning">Start scanning</button>
<p id="result"></p>
<script type="module">
import "https://cdn.jsdelivr.net/npm/scanbot-web-sdk@7.0.0/bundle/ScanbotSDK.ui2.min.js";
const resultBox = document.getElementById("result");
const wasm_path = "https://cdn.jsdelivr.net/npm/scanbot-web-sdk@7.0.0/bundle/bin";
const sdk = await ScanbotSDK.initialize({ enginePath: `${wasm_path}/barcode-scanner/` });
document.getElementById("start-scanning").onclick = async () => {
const config = new ScanbotSDK.UI.Config.BarcodeScannerScreenConfiguration();
config.scannerConfiguration.barcodeFormats = ["PDF_417"];
config.viewFinder.aspectRatio.height = 1;
config.viewFinder.aspectRatio.width = 3;
const scanResult = await ScanbotSDK.UI.createBarcodeScanner(config);
if (scanResult?.items === undefined || scanResult.items.length == 0) {
resultBox.innerText = "Scanning aborted by the user";
return;
}
const barcode = scanResult?.items[0].barcode;
const extractedDocument = barcode.extractedDocument;
const extractDocumentFields = (document) => {
const fields = [];
const processFields = (input) => {
if (!Array.isArray(input))
return;
input.forEach((field) => {
if (field.type?.name && field.value?.text) {
fields.push(field);
}
});
};
processFields(document.fields);
if (Array.isArray(document.children)) {
document.children.forEach((child) => {
processFields(child.fields);
});
}
return fields;
}
const documentResult = extractDocumentFields(extractedDocument);
resultBox.innerText = documentResult.map((field) => `${field.type.name}: ${field.value.text}`).join("\n");
};
</script>
</body>
</html>

Feel free to copy the code into an HTML file and run it on your development server. When moving to production, we recommend you download the SDK and host it on your server instead of using a CDN.
Get started scanning and parsing driver’s licenses today
You can run the Scanbot SDK from your project for 60 seconds per session without a license. For more in-depth testing, just generate a free trial license.
Our example apps on GitHub include implementations for various app development frameworks to help you with the integration process. We also offer free integration support via Slack and MS Teams to help with any remaining questions.
Already convinced? Then make the most of our fixed pricing model and request a quote today!
FAQ
How does the Scanbot US Driver’s License Scanner SDK ensure data privacy during scanning?
The Scanbot US Driver’s License Scanner SDK operates entirely offline, meaning all data processing occurs directly on the device without the need for an internet connection. This design ensures that sensitive personal information extracted from driver’s licenses remains secure and is not transmitted over networks, aligning with data protection regulations and best practices
Can the Scanbot SDK parse barcodes from driver’s licenses issued outside the United States?
While the Scanbot US Driver’s License Scanner SDK is specifically designed to decode PDF417 barcodes on US driver’s licenses, Scanbot also offers solutions for other regions, such as a German Driver’s License Scanner. For driver’s licenses from other countries, it’s essential to verify the barcode format and data encoding standards used, as they may differ from the AAMVA specifications adopted in the US and Canada.
What are the benefits of integrating a driver’s license scanner into a mobile application?
Efficiency: Automates data entry, reducing the time required to input personal information manually.
Accuracy: Minimizes human errors associated with manual data entry, ensuring the correctness of captured information.
User Experience: Enhances the user experience by streamlining processes like account creation, identity verification, and age validation.
Security: Ensures that sensitive data is processed securely, especially when using offline-capable solutions like the Scanbot SDK.