Standards/pdf417
PDF417
Overview
PDF417 is a stacked-linear 2D barcode symbology invented by Dr. Ynjiun P. Wang at Symbol Technologies in 1991 [1, 2]. The name decomposes the symbology's structure: PDF = "Portable Data File"; 417 = each codeword is 4 bars and 4 spaces in a 17-module-wide pattern [1]. It is standardised as ISO/IEC 15438 and is published royalty-free in the public domain [1], which is the main reason it became the substrate for government IDs and airline boarding passes worldwide rather than a proprietary alternative.
History
Dr. Ynjiun P. Wang developed PDF417 while at Symbol Technologies in 1991 [1, 2]. US Patent 5,243,655, filed in 1991, was issued to Symbol Technologies on 7 September 1993 [2]. Symbol later placed the symbology in the public domain, free of licences and fees [1] — a deliberate choice that enabled widespread adoption in government and inter-industry contexts without per-scan royalty negotiations.
The symbology was first formalised as an international standard by AIM (Association for Automatic Identification and Mobility), and subsequently published by ISO as ISO/IEC 15438 in 2001, with revised editions in 2006 and 2015 [1, 3].
Technical specification
PDF417 is a stacked-linear symbology — a series of independent linear "mini-barcodes" stacked on top of each other to form a 2D pattern that is read row by row [4]. The symbology is defined by ISO/IEC 15438:2015 [3].
| Parameter | Value |
|---|---|
| Symbol shape | Rectangular, stacked rows |
| Rows | 3 to 90 |
| Data columns | 1 to 30 |
| Codeword structure | 4 bars + 4 spaces over 17 modules |
| Encoding base | Base 929 (900 data + 29 special function codewords) |
| Compaction modes | Text, Numeric, Byte |
| Max numeric capacity | 2 710 digits |
| Max alphanumeric capacity | 1 850 characters |
| Max binary capacity | 1 108 bytes |
| Max codewords / symbol | 925 |
| Error correction | Reed–Solomon, 2 to 512 EC codewords |
| Error correction levels | 0 to 8 (selectable) |
| Damage tolerance | Up to ~50 % at highest EC level |
Each row carries a quiet zone, start pattern, row-left codeword, 1–30 data codewords, row-right codeword, stop pattern, and another quiet zone [1].
Variants:
- Compact PDF417 (also called "Truncated PDF417") — strips the right-hand row indicator and stop pattern for narrower width, at the cost of error recovery in damaged rows [1].
- Macro PDF417 — splits a payload too large for one symbol across up to 99 998 linked symbols, used for very large documents [1].
- Micro PDF417 — separate symbology (ISO/IEC 24728) for small footprints; not the same as Compact PDF417.
Use cases
PDF417's rectangular shape and high capacity make it the dominant choice for printed credentials where data must travel with the document.
- US driver's licenses and state ID cards — the AAMVA (American Association of Motor Vehicle Administrators) DL/ID Card Design Standard mandates PDF417 on the back of every US driver's license [5, 6]. The PDF417 payload encodes name, address, DOB, eye color, height, license class, restrictions, and other AAMVA D20 Data Dictionary fields [6, 7]. The US Department of Homeland Security selected PDF417 as the barcode for RealID-compliant credentials [5].
- Airline boarding passes — IATA's Bar Coded Boarding Pass (BCBP) standard mandates PDF417 on printed boarding passes for IATA member airlines since 2010, in use by ~350 airlines [8].
- Shipping labels — FedEx and other carriers encode tracking numbers and shipment metadata in PDF417 on package labels [5].
- US Postal Service — internal mail-processing labels [1].
- Croatian payment slips (hub3) — the pdf417 symbology is the substrate carrying the 14-field HUB3 payload on every Croatian uplatnica [hub3-ref].
- National IDs and visas — including Israeli border-crossing cards [1].
- Age verification at venues — bars, nightclubs and casinos scan the PDF417 on US driver's licenses to validate age and enroll patrons in loyalty / self-exclusion programs [5].
Implementations
PDF417's public-domain status produced a healthy multi-language ecosystem; both encoders and decoders exist in every major language.
Encoders:
- Python — ihabunek/pdf417-py — 98★, last commit 2024. CLI + library API. Supports Macro PDF417 for oversized payloads [9].
- PHP — ihabunek/pdf417-php — 94★, archived 2023 (no longer maintained). Author moved on from PHP [10]. Still functional; forks exist (e.g.
leongrdic/php-pdf417). - JavaScript — pkoretic/pdf417-generator — 48★. Browser + Node.js, renders to canvas [11].
- C# / .NET — Uzi-Granot/PDF417BarcodeEncoder — 9★, active 2025. Targets .NET Framework 4.6.2 and .NET Standard 2.0; ships demo apps [12].
- Rust (no_std) —
Sofiman/pdf417— for embedded use.
Decoders:
- Java (with ports) — zxing/zxing — 34,000★, active 2025. The de-facto open-source 1D/2D barcode reader; PDF417 in its supported-formats list [13]. Ports exist in C++, Objective-C, JavaScript (
zxing-js), C# (ZXing.Net). - AAMVA-specific — c0shea/IdParser — 106★, last commit 2019. Parses US driver's license / state ID PDF417 payloads into structured fields per the AAMVA D20 Data Dictionary [14].
Comparison
vs. qr-code — QR Code is a square matrix symbology (ISO/IEC 18004); PDF417 is a rectangular stack of linear rows. QR holds more raw data (~4 296 chars vs PDF417's 1 850 alphanumeric), is omnidirectional, and is ubiquitous on consumer phones for instant scanning [15, 4]. PDF417 is preferred where (a) the rectangular shape fits the host document better (the back of a driver's license, the bottom of a boarding pass), (b) the payload is fixed-size structured data rather than a URL, and (c) the reading device is a fixed scanner or app rather than a consumer's camera [5].
vs. data-matrix — Data Matrix (ISO/IEC 16022) is also a square matrix barcode but optimised for very small print sizes — a PDF417 symbol takes roughly 4× the printed area of a Data Matrix carrying the same data [15]. Data Matrix dominates industrial marking (small components, pharmaceutical serialization); PDF417 dominates document-borne credentials.
The rough rule:
- Need a barcode on a square space scanned by a phone for consumer interaction? → QR Code.
- Need a barcode on a tiny part being tracked through a factory? → Data Matrix.
- Need a barcode on a printed credential carrying structured personal/payment data? → PDF417.
Fun facts
PDF417 was invented in 1991 at Symbol Technologies, two years before Adobe released its now-ubiquitous PDF document format in 1993 [1]. The acronyms collide ("Portable Data File" vs "Portable Document Format") but the barcode predates the document format, despite the document format being far more famous today.
Symbol Technologies' decision to place PDF417 entirely in the public domain in the early 1990s — a deliberate departure from the patent-licensing model Symbol applied to other technologies — is the structural reason PDF417 became the default for government-issued credentials. Per-scan royalties on a driver's license barcode would have been a non-starter for state DMVs and IATA airlines; the absence of fees made standardisation possible [1].
Status
Active. ISO/IEC 15438:2015 is the current edition [3]. AAMVA continues to mandate PDF417 in its DL/ID Card Design Standard (2020 edition cited in current state implementations) [6]. IATA BCBP remains the global airline standard for printed boarding passes [8]. No successor or deprecation notice exists; the symbology's combination of rectangular form factor, multi-line scanability, and royalty-free status keeps it entrenched in credential-printing contexts.
Sources
- PDF417 — Wikipedia
- PDF417: History, Advantages, Limitations, Usage — ByteScout
- ISO/IEC 15438:2015 — PDF417 bar code symbology specification
- PDF417 Barcode Symbology — Scandit
- PDF417 Barcode: Understanding the ID Standard — Microblink
- AAMVA 2020 DL/ID Card Design Standard
- Scan and parse PDF417 on AAMVA documents — Dynamsoft
- Boarding Pass Scanners for PDF417 — Scanbot SDK
- ihabunek/pdf417-py — GitHub
- ihabunek/pdf417-php — GitHub
- pkoretic/pdf417-generator — GitHub
- Uzi-Granot/PDF417BarcodeEncoder — GitHub
- zxing/zxing — GitHub
- c0shea/IdParser — GitHub
- QR vs PDF417 vs DataMatrix — Dynamsoft
Deployments
Found in the following country reports (grep across reports/countries/):
- HR — HR-croatia.md
Regions / aggregations not mapped to a single country
- Universal