# AAMVA DL/ID

> Source: https://docs.barcoder.ai/docs/standards/aamva-dl
> research date 2026-06-03 · extracted at 2026-10-03
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [AAMVA DL/ID Card Design Standard (2020) — AAMVA](https://www.aamva.org/getmedia/99ac7057-0f4d-4461-b0a2-3a5532e1b35c/AAMVA-2020-DLID-Card-Design-Standard.pdf)
- [AAMVA DL/ID Card Design Standard (2025) — AAMVA](https://www.aamva.org/getmedia/81af105d-8b1b-45e1-aa46-f1800a259ed1/AAMVADLIDCardDesignStandard2025.pdf)
- [North America DL/ID — Supported Code Types — Dynamsoft](https://www.dynamsoft.com/code-parser/docs/core/code-types/aamva-dl-id.html)

## Overview

The **AAMVA DL/ID Card Design Standard** is the North American standard, published by the **American Association of Motor Vehicle Administrators (AAMVA)**, that governs the design and machine-readable encoding of driver licenses and identification cards. Its **Annex D** defines the **mandatory [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) two-dimensional bar code** carried on the back of essentially every U.S. and Canadian driver license / ID card, mapping the cardholder's data elements onto that barcode <sup>[1][1]</sup>.

The data format is a **flat, cleartext, length-and-separator-delimited record**: a fixed header that identifies the symbol as AAMVA-compliant, one or more "subfile" designators ("DL", "ID", "EN"), and a list of three-letter **element identifiers** (e.g. `DCS` = family name, `DAQ` = customer ID number) each prefacing its value <sup>[1][1]</sup>. The carrier symbology is mandated to be exactly [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) (per ISO/IEC 15438) — the Compact, Micro and Macro PDF417 variants are explicitly forbidden <sup>[1][1]</sup>.

## History

The standard began as the **AAMVA DL/ID-2000** national standard for the driver license / identification card; barcodes printed before that standard's adoption are designated version "0"/"00" <sup>[1][1]</sup>. Each subsequent edition increments the **AAMVA Version Number** field encoded in the barcode header <sup>[1][1]</sup>:

| AAMVA version | Edition | Date |
|---|---|---|
| 01 | AAMVA DL/ID-2000 | 2000 |
| 02 | Card Design Specification v1.0 | 09-2003 |
| 03 | Card Design Specification v2.0 | 03-2005 |
| 04 | Card Design Standard v1.0 | 07-2009 |
| 05 | Card Design Standard v1.0 | 07-2010 |
| 06 | Card Design Standard v1.0 | 06-2012* |
| 07 | Card Design Standard v1.0 | 06-2012 |
| 08 | Card Design Standard v1.0 | 08-2013 |
| 09 | Card Design Standard v1.0 | 09-2016 |
| 10 | Card Design Standard (2020) | 2020 |

(*The 2020 standard lists version "06" against the dated 07-2011 edition and "07" against 06-2012 <sup>[1][1]</sup>.) The standard continues to be revised; a **2025 edition** has been published <sup>[2][2]</sup>. Independent parser documentation lists supported AAMVA versions 2000, 2003, 2005, 2009, 2010, 2011, 2012, 2013 and 2016, matching the header version mapping <sup>[3][3]</sup>.

## Technical specification

**Carrier.** The minimum mandatory machine-readable technology is the **[PDF417](https://docs.barcoder.ai/docs/standards/pdf417)** symbology (ISO/IEC 15438). Compact PDF417, MicroPDF417 and MacroPDF417 must **not** be used. The symbol uses an X-dimension between 0.170 mm and 0.380 mm, a minimum **error-correction level of 3** (level 5 recommended where space allows), the ISO 8859-1 (Latin-1) 256-character set, must sit in "Zone V" of the card, oriented with bars perpendicular to the card's bottom edge (≤ ±5° skew), within a maximum 75.565 mm × 38.1 mm area <sup>[1][1]</sup>.

**File header (fixed).** Every compliant symbol begins with a fixed header <sup>[1][1]</sup>:

| Field | Bytes | Value |
|---|---|---|
| Compliance Indicator | 1 | `@` (0x40) |
| Data Element Separator | 1 | LF (0x0A) |
| Record Separator | 1 | RS (0x1E) |
| Segment Terminator | 1 | CR (0x0D) |
| File Type | 5 | `ANSI␣` (ANSI + trailing space) |
| Issuer Identification Number (IIN) | 6 | identifies the issuing jurisdiction |
| AAMVA Version Number | 2 | 00–99, per table above |
| Jurisdiction Version Number | 2 | 00–99, jurisdiction's own revision |
| Number of Entries | 2 | count of subfile designators that follow |

**Subfile designator (fixed).** After the header come one or more subfile designators. Each is **Subfile Type** (2 chars: `DL`, `ID`, or `EN` for enhanced DL; jurisdiction-specific subfiles begin with `Z` + the jurisdiction's first letter, e.g. `ZC` for California/Colorado), a 4-digit **Offset** (bytes from start of file), and a 4-digit **Length** (subfile length in bytes, including the two-character type and the trailing segment terminator) <sup>[1][1]</sup>.

**Data elements (Table D.3, mandatory).** Within a subfile each value is prefixed by its three-letter Element ID; a Data Element Separator (LF) both terminates a field and signals the next field follows. The minimum mandatory elements are <sup>[1][1]</sup>:

| ID | Element | Notes |
|---|---|---|
| DCA | Jurisdiction-specific vehicle class | V6ANS, DL only |
| DCB | Jurisdiction-specific restriction codes | V12ANS, DL only |
| DCD | Jurisdiction-specific endorsement codes | V5ANS, DL only |
| DBA | Document Expiration Date | F8N (MMDDCCYY US / CCYYMMDD CA) |
| DCS | Customer Family Name (surname) | V40ANS |
| DAC | Customer First Name | V40ANS |
| DAD | Customer Middle Name(s) | V40ANS |
| DBD | Document Issue Date | F8N |
| DBB | Date of Birth | F8N |
| DBC | Sex | F1N (1=male, 2=female, 9=not specified) |
| DAY | Eye Color | F3A (ANSI D-20 codes) |
| DAU | Height | F6ANS (e.g. `073 in` or `181 cm`) |
| DAG | Address – Street 1 | V35ANS |
| DAI | Address – City | V20ANS |
| DAJ | Address – Jurisdiction (state) | F2A |
| DAK | Address – Postal Code | F11ANS |
| DAQ | Customer ID Number | V25ANS (the license/ID number) |
| DCF | Document Discriminator | V25ANS (uniquely IDs this physical document) |
| DCG | Country | F3A (`USA` / `CAN`) |
| DDE | Family name truncation | F1A (T/N/U) |
| DDF | First name truncation | F1A (T/N/U) |
| DDG | Middle name truncation | F1A (T/N/U) |

Mandatory elements with no value are encoded with `NONE`; if data is unavailable, `unavl` is encoded <sup>[1][1]</sup>. Optional elements (Table D.4) include `DAH` (street line 2) and many others. **All mandatory and optional data must be unencrypted**; a jurisdiction may encrypt only its own jurisdiction-specific subfile <sup>[1][1]</sup>.

## Use cases

- **Identity and age verification** — bars, retailers and venues scan the [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) to read date of birth and name; the standard explicitly cites identity and age verification as core functions <sup>[1][1]</sup>.
- **Law enforcement** — the standard "primarily seeks to support the needs of the law-enforcement community" during traffic stops and other interactions with DL/ID documents <sup>[1][1]</sup>.
- **Administrative automation and address verification** — automating data entry and confirming address details <sup>[1][1]</sup>.
- **Account opening / KYC** — third-party software parses the barcode to auto-fill identity fields.

## Implementations

- **`c0shea/IdParser`** — C#, MIT. Parses [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) AAMVA-compliant driver's licenses and ID cards. ~106 stars; last pushed 2023 <sup>[4][4]</sup>.
- **`benhovinga/aamva_barcode_library`** — Python, MIT. Parses the barcode data on a North American DL/ID, decomposing it into file header, subfiles and subfile elements per AAMVA Annex D. ~16 stars; last pushed 2025 <sup>[5][5]</sup>.
- **Commercial SDKs** — e.g. Dynamsoft's Code Parser documents an `AAMVA_DL_ID` ([PDF417](https://docs.barcoder.ai/docs/standards/pdf417)) code type and an `AAMVA_DL_ID_WITH_MAG_STRIPE` variant, exposing the parsed element fields <sup>[3][3]</sup>.

## Comparison

Versus **[IATA BCBP](https://docs.barcoder.ai/docs/standards/iata-bcbp)**: both are flat cleartext formats carried in [PDF417](https://docs.barcoder.ai/docs/standards/pdf417), but AAMVA **mandates a single symbology** ([PDF417](https://docs.barcoder.ai/docs/standards/pdf417) only, no Compact/Micro/Macro and no matrix codes), whereas BCBP permits four symbologies <sup>[1][1]</sup>. AAMVA uses **named three-letter element IDs with separators** (self-describing), whereas BCBP uses fixed-position length-delimited fields.

Versus the **[Mobile Driving Licence](https://docs.barcoder.ai/docs/standards/mobile-driving-licence) (mDL, ISO/IEC 18013-5)**: the AAMVA [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) is the *physical-card* incarnation of the driver license — cleartext, no selective disclosure, fully revealed on every scan — while the mDL is the *digital* incarnation, an mdoc carrying signed, selectively-disclosable attributes engaged over a QR/NFC/BLE channel <sup>[1][1]</sup>. AAMVA also publishes the companion **mDL Implementation Guidelines**, so the two coexist: the [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) standard governs the plastic card, mDL governs the phone <sup>[1][1]</sup>.

## Fun facts

- The barcode payload is deliberately **unencrypted**, so any scanner — including off-the-shelf phone apps — can read a person's full name, address and date of birth straight off the back of a U.S. or Canadian license <sup>[1][1]</sup>.
- Jurisdiction-specific subfiles are tagged by the first letter of the jurisdiction's name, which creates collisions: `ZC` could be California, Colorado or Connecticut, so parsers must disambiguate using the IIN or address <sup>[1][1]</sup>.

## Status

**Active and near-universal in North America.** The [PDF417](https://docs.barcoder.ai/docs/standards/pdf417) barcode is mandatory on compliant U.S. and Canadian DL/ID cards, and the standard is actively maintained — the 2020 edition (AAMVA version 10) is widely deployed and a **2025 edition** has been published <sup>[1][1], [2][2]</sup>. The companion mDL work (see [Mobile Driving Licence](https://docs.barcoder.ai/docs/standards/mobile-driving-licence)) is rolling out alongside, not replacing, the physical-card barcode.

## Sources

[1]: https://www.aamva.org/getmedia/99ac7057-0f4d-4461-b0a2-3a5532e1b35c/AAMVA-2020-DLID-Card-Design-Standard.pdf
[2]: https://www.aamva.org/getmedia/81af105d-8b1b-45e1-aa46-f1800a259ed1/AAMVADLIDCardDesignStandard2025.pdf
[3]: https://www.dynamsoft.com/code-parser/docs/core/code-types/aamva-dl-id.html
[4]: https://github.com/c0shea/IdParser
[5]: https://github.com/benhovinga/aamva_barcode_library

1. [AAMVA DL/ID Card Design Standard (2020)](https://www.aamva.org/getmedia/99ac7057-0f4d-4461-b0a2-3a5532e1b35c/AAMVA-2020-DLID-Card-Design-Standard.pdf) — AAMVA, 2020
2. [AAMVA DL/ID Card Design Standard (2025)](https://www.aamva.org/getmedia/81af105d-8b1b-45e1-aa46-f1800a259ed1/AAMVADLIDCardDesignStandard2025.pdf) — AAMVA, 2025
3. [North America DL/ID — Supported Code Types](https://www.dynamsoft.com/code-parser/docs/core/code-types/aamva-dl-id.html) — Dynamsoft
4. [IdParser — Parses PDF417 AAMVA-compliant driver's licenses and ID cards](https://github.com/c0shea/IdParser) — c0shea (GitHub), 2023
5. [aamva_barcode_library](https://github.com/benhovinga/aamva_barcode_library) — benhovinga (GitHub), 2025

## Deployments

_No country reports mention this standard by name._
