# DLEncoder > Free, browser-based AAMVA encoder and decoder for driver license and ID test data. Generates > PDF417 barcodes and Annex F magnetic stripe (magstripe) tracks 1, 2 and 3 from realistic > synthetic identities, under v10 (2020) or v11 (2025) of the AAMVA DL/ID Card Design Standard. > Everything runs client-side; no data is uploaded or stored. DLEncoder is a developer and QA tool at https://www.dlencoder.com/. It exists to give engineers working on age verification, point-of-sale, ID-scanning, and compliance systems a source of realistic, standards-correct AAMVA test data without using anyone's real driver license. All identities are synthetic. The tool does not read, store, or transmit real cardholder data. ## What it does - **Encode** — builds a spec-compliant AAMVA byte stream for a generated synthetic person and renders it two ways: as a **PDF417 barcode** (Annex D) and as an **Annex F magnetic stripe** byte stream (tracks 1, 2 and 3). Both update live and are click-to-copy. - **Decode** — parses a raw AAMVA PDF417 payload (pasted, or scanned with an HID keyboard-wedge scanner), reports the parsed structure, derives the equivalent Annex F magstripe tracks, and flags scanner-configuration and encoding problems. ## Magnetic stripe (Annex F) support Annex F defines the optional magnetic stripe on the back of a DL/ID card, encoding cardholder data across three tracks as printable ASCII. It coexists with the Annex D PDF417 barcode; many jurisdictions issue cards carrying both. DLEncoder emits all three tracks: - **Track 1** — `%` + State(2) + City(≤13) + Name (`family$first$middle$suffix`, ≤35) + Address (`line1$line2`, ≤29) + `?`. A `^` separator is emitted when a variable field is under its maximum width. - **Track 2** — `;` + IIN(6) + DL number(≤13) + `=` + Expiration(`YYMM`) + Date of birth (`CCYYMMDD`) + optional DL-number overflow(field 7) + `?`. - **Track 3** — `%` + CDS version(1) + Jurisdiction version(1) + Postal(11) + Class(2) + Restrictions(10) + Endorsements(4) + Sex(1) + Height(`FII`, 3) + Weight(3) + Hair(3) + Eyes(3) + `?`. Track 2 encodes the driver license number by replacing each letter with its two-digit position in the alphabet (A=01 … Z=26); digits pass through and punctuation is dropped. Example: `C2927129` becomes `032927129`. **Fidelity, stated precisely:** the output is the *spec-compliant Annex F form*, not the output of any particular reader or jurisdiction. Three known California reader deviations are deliberately not reproduced — the track 3 start sentinel stays `%` (not `#`), the version bytes stay `00` (not `!!`), and sex is `1`/`2`/`9` (not `M`/`F`). Track 3 ends immediately after eye color, with no jurisdiction discretionary tail and no LRC, because neither is derivable from barcode data. **The decoder does not parse magstripe input.** It accepts PDF417 payloads and derives the magstripe tracks from them. ## Barcode support PDF417 only, rendered via bwip-js. Code39 and other symbologies are not supported. ## Standards and coverage - AAMVA DL/ID Card Design Standard **v10 (2020)** and **v11 (2025)**, with version-aware element gating — v10-only elements (`DBN`, `DBG`, `DBS`, `DCL`, `DDC`) are omitted under v11, and v11-only indicators (`DDM`, `DDN`, `DDO`, `DDP`) are omitted under v10. - Primary subfile types `DL`, `ID`, and `EN` (v10 only). - Jurisdiction-specific `Z`-prefixed subfiles, including the **Texas LTC (`ZT`)** subfile. - REAL ID, organ donor, veteran, CDL, and enhanced credential indicators. - Age-threshold auto-computation from date of birth (`DDH`, `DDI`, `DDJ`). - Issuer identification numbers (IINs) for all 50 states, the District of Columbia, and five territories (56 jurisdictions). - Driver license number formats for 51 jurisdictions. Check-digit states (WI, MD, MA, NH) match character class and length but are not validated against check-digit algorithms. - Synthetic city, ZIP, and county data for 45 states. ## Synthetic data generation Names are drawn Zipf-weighted from rank-ordered lists (SSA top-100 for the living US population, broadened for demographic coverage). Height and weight are drawn from truncated normal distributions using CDC NHANES 2015–2018 adult averages. Ages are uniform in [21, 78]. Randomness uses `crypto.getRandomValues` with unbiased rejection sampling. ## Privacy Encoding, decoding, magstripe derivation, and barcode rendering all execute in the browser. No payload is transmitted to a server and nothing is persisted. ## Attribution AAMVA® and the DL/ID Card Design Standard are the copyright and trademarks of the American Association of Motor Vehicle Administrators (https://www.aamva.org/). DLEncoder is an independent implementation provided free of charge for engineering, integration, and QA testing — not affiliated with, endorsed by, or sponsored by AAMVA. Sponsored by FastBound (https://www.fastbound.com), FFL software for A&D Bound Book and 4473 ATF compliance since 2010. ## Links - [DLEncoder](https://www.dlencoder.com/): the tool itself — encode and decode views. - [AAMVA](https://www.aamva.org/): publisher of the DL/ID Card Design Standard. - [FastBound](https://www.fastbound.com): sponsor; FFL compliance software.