AAMVA driver license barcode

The 2D barcode on the back of every US driver license is a PDF417 symbol encoding the licensee's identity fields per the AAMVA Card Design Standard. Originally specified in 2000, currently at version 10 (2020). This is the reference for parser development, kiosk testing, and authorized-issuer workflows.

Current authority:AAMVA DL/ID Card Design Standard (2025), published July 2025; it supersedes the 2020 edition (CDS v10).
What our encoder emits: a version 10 header (the 2020 edition), the revision on the majority of cards in circulation and the one every reader we have tested accepts. Cards issued under the 2025 standard carry a newer version number and a few changed elements; we will move the encoder when jurisdictions start issuing against it.
Barcode symbology: PDF417 (ISO/IEC 15438).
Revision history: v8 (2013), v9 (2016), v10 (2020), 2025 edition (2025). Cards in circulation span all of them, so a parser must accept every revision, and ours does.

What it is

An AAMVA barcode is a PDF417 symbol whose decoded payload begins with a fixed header, then one "subfile" per data domain. The core subfile is DL (driver license); commercial licenses add ZA..ZZ jurisdiction-specific subfiles.

Header structure:

@

ANSI <IIN><version><jurisdiction version><subfile count>DL<subfile offset><subfile length>

The first four bytes are compliance indicator (@), data element separator (\x1e), record separator (\x0d), and the literal ANSI . Parsers that miss these bytes reject the code.

Element codes

Each data element is a 3-character code followed by its value, with a newline separator. The most common:

CodeMeaningFormat
DAACustomer name (legacy, pre-v8)LAST,FIRST,MIDDLE
DACFirst nameText
DCSLast nameText
DADMiddle nameText
DBBDate of birthMMDDYYYY
DBALicense expirationMMDDYYYY
DBDLicense issue dateMMDDYYYY
DBCSex (1=male, 2=female, 9=N/A)1 digit
DAQLicense numberAlphanumeric
DAGStreet address line 1Text
DAICityText
DAJState (2-char)Alpha
DAKZIP code5 or 9 digits
DAUHeighte.g. 070 in
DAWWeight (pounds)e.g. 180
DAYEye colour3 letters: BLU / BRO / GRN / GRY / HZL / BLK / MAR / PNK / DIC / UNK
DAZHair colour3 letters: BAL / BLK / BLN / BRO / GRY / RED / SDY / WHI / UNK
DCAVehicle classA / B / C / D / M / Others
DCBRestrictionsAlphanumeric
DCDEndorsementsAlphanumeric
DCFDocument discriminatorJurisdiction-specific
DDEFamily name truncationT / N / U

Issuer Identification Number (IIN)

Every US state has a 6-digit IIN assigned by AAMVA. Examples:

StateIINStateIIN
California636014New York636001
Texas636015Florida636010
Illinois636035Pennsylvania636025
Ohio636023Georgia636055
North Carolina636004Michigan636032

The full jurisdiction IIN table (50 states + DC + Canadian provinces + US territories) lives in the generator's jurisdiction dropdown, scroll through to find any issuer.

Version differences

VersionPublishedKey changes
v82013Added the compliance header (@\x1e\r). Baseline for modern parsers.
v92016Clarified DCF document-discriminator format. Added DDE/DDF/DDG truncation flags.
v102020Added document-image elements; relaxed height units. Most modern DMVs emit v10 headers.

What real licenses have that a printed AAMVA barcode does NOT

This matters for anti-fraud workflows: a PDF417 that parses correctly is not the same as a genuine license. Physical licenses rely on:

Age-verification kiosks that rely on PDF417 parsing alone are routinely spoofed. Production workflows must combine barcode parse + at least one physical feature check.

Canonical test vectors

Use obviously-synthetic data when generating test payloads. JOHN TEST, JANE SAMPLE, DOB in the future or pre-1900, anything that cannot be mistaken for a real person.

CaseInputsExpected header substring
California v10, syntheticjurisdiction=CA
first=JOHN
last=TEST
license=D1234567
dob=1990-01-01
ANSI 636014100002DL
Texas v10, syntheticjurisdiction=TX
first=JANE
last=SAMPLE
license=12345678
ANSI 636015100002DL
New York v9, syntheticjurisdiction=NY
first=TEST
last=USER
ANSI 636001090002DL

Common pitfalls

Scanner compatibility

ReaderSupportNotes
iOS Camera (iOS 17+)License-awareWallet app recognises AAMVA payloads and can offer to add as an ID card.
Android CameraNot nativeTreats as raw PDF417. License-aware parsing requires an ID-verification app.
Google LensRaw PDF417 onlyDisplays the decoded text without AAMVA parsing.
Commercial ID-verification SDK (IDEMIA, Jumio, Onfido)Full parseIndustry-standard for age-verification kiosks and online KYC.
Industrial PDF417 scanner (Zebra, Honeywell)Full parseMost modern firmware includes AAMVA parsing out of the box.

See also

Spec version verified 2026-09-03 (AAMVA DL/ID CDS 2025 edition; encoder emits v10 headers). Next review: 2026-12-03.