Aztec Code
Aztec is the 2D barcode on every airline boarding pass, almost every rail-ticket app, and a growing share of transit fareplates. It's the one 2D symbology specifically optimised to decode reliably from a low-contrast phone screen behind a thumb smudge — which is why IATA chose it for the BCBP (Bar Coded Boarding Pass) standard in 2005 and never moved.
IATA application: BCBP (Bar Coded Boarding Pass) Resolution 792 — defines the Type M1 payload format every airline uses.
Originator: Welch Allyn (now Honeywell), 1995. Royalty-free since the original patent expired.
What it is
A square matrix code with a distinctive bullseye finder pattern in the centre (concentric squares), surrounded by data modules arranged in a spiral. Unlike QR, Aztec has no position/alignment patterns in the corners — the centre bullseye is the only fiducial, which means Aztec tolerates rotation, off-centre framing, and non-square cropping much better than QR.
Five properties that make Aztec unusually good for display-on-screen scanning:
- No quiet zone required. QR needs a 4-module margin; Aztec decodes with zero. Useful when a phone screen's edge or bezel crops into the code.
- Bullseye finder tolerates contrast loss. Phone LCDs at low brightness, sun glare, oleophobic-coating smudges — Aztec survives all three where QR's three corner markers wash out.
- Variable ECC 5%–95%. QR has 4 levels (L/M/Q/H) capping at 30%. Aztec goes to 95% error correction for extreme-damage scenarios.
- Compact relative to capacity. At 3,067 alphanumeric chars maximum, Aztec packs more in a smaller footprint than PDF417 or Data Matrix.
- No orientation lock. QR requires the finder patterns to resolve orientation; Aztec's bullseye is rotationally symmetric.
Size and capacity
| Variant | Dimensions | Max alphanumeric capacity | Typical use |
|---|---|---|---|
| Compact | 15 × 15 to 27 × 27 modules | ~110 chars | Short URLs, IATA seat assignments |
| Full-Range (small) | 19 × 19 to 45 × 45 | ~400 chars | BCBP Type M1 boarding passes |
| Full-Range (medium) | 49 × 49 to 95 × 95 | ~1,200 chars | Transit tickets with multiple segments |
| Full-Range (max) | 151 × 151 | ~3,067 chars | Heavy payloads — rare in practice |
Error correction levels
Aztec ECC is specified as a percentage of the data codewords dedicated to Reed-Solomon correction. The generator accepts any value from 5% to 95%; defaults are 23% (matches QR level M) for general use and 50% for boarding passes / transit tickets.
| ECC level | Typical use | Tradeoff |
|---|---|---|
| 5% | Experiments / demos only | Fails on any real-world damage. Never ship production codes at this level. |
| 23% (default) | Short-URL Aztec on digital displays | Matches QR level M. Standard choice when the reader and environment are both good. |
| 50% | IATA BCBP, transit tickets, crumpled paper | Survives a folded corner or a significant smudge. IATA's implicit default. |
| 75%–95% | High-abrasion or high-fold environments | Payload capacity drops sharply. Only for specialist use. |
IATA BCBP format — Aztec's canonical use
The International Air Transport Association's Type M1 Bar Coded Boarding Pass is the single largest Aztec application by volume — billions of codes per year. The payload is a fixed-position ASCII string with these leading fields:
M1{PASSENGER/NAME}E{BOOKING_REF} {FROM} {TO} {AIRLINE} {FLIGHT} {DAY}{COMPARTMENT}{SEAT}{CHECK_IN_SEQ}{PASSENGER_STATUS}- M1 — format indicator (always M1 for single-segment).
- PASSENGER/NAME — surname/given, padded with spaces to 20 chars.
- E — electronic ticket indicator.
- BOOKING_REF — 6-char PNR (passenger name record).
- FROM/TO — 3-letter IATA airport codes (DEN, LHR, NRT…).
- AIRLINE — 3-char carrier code (UA, BA, JL…).
- DAY — Julian day of year (001–366).
- COMPARTMENT — class of travel (F/J/Y/…).
Canonical test vectors
| Case | Payload | Expected substring |
|---|---|---|
| Short URL | https://example.com/board/AB12 | example.com/board/AB12 |
| IATA BCBP minimal | M1DOE/JOHN EABC123 JFKLHRBA 0100 042Y034A0001 100 | M1DOE/JOHN |
| Transit ticket with segment metadata | M1SMITH/JANE EXYZ789 LAXSFOVA 0250 032Y012C0015 147 | M1SMITH/JANE |
Common pitfalls
- Consumer phone cameras don't decode Aztec. iPhone Camera returns nothing. Most Android cameras do the same. If your audience is the general public with a phone, use QR and accept lower density. Aztec is for dedicated readers (airport gates, turnstile scanners, OEM industrial imagers).
- ECC 5% is a trap. The minimum legal ECC produces codes that fail on any crumple, glare, or abrasion. 23% is the safe floor; 50% is the production default for anything that will be printed on paper.
- BCBP Type M1 vs M2. M1 is single-segment; M2 is multi-segment (up to 4 flights in one code). Verify your airline's gate readers support M2 before embedding multiple segments — some older readers reject it.
- No position markers — rotation is handled but perspective isn't. Aztec tolerates rotation but NOT heavy perspective distortion. Scan from roughly perpendicular to the surface; 30°+ tilt degrades decoding.
- Styling disabled. QR-specific features (custom dot shapes, gradients, centre logo) don't apply to Aztec. Abundera's Style panel disables itself for this type — see the capability banner on the Aztec generator.
- Module pitch for print. Aztec needs at least 0.33 mm/module for reliable laser-scanner decoding; 0.5 mm for phone-camera reads on large-format Aztec tickets.
Scanner compatibility
| Reader | Aztec support | Notes |
|---|---|---|
| iOS Camera (iOS 15+) | No | Apple has not added Aztec to the native Camera app. Third-party apps with Scandit or Dynamsoft SDKs work. |
| Android Camera (Google/Pixel) | Partial | Some OEM camera apps decode; Pixel stock camera does not reliably. |
| Google Lens | Unreliable | Decodes boarding-pass Aztec inconsistently. Not a viable verification path for production. |
| Zebra / Honeywell / Datalogic industrial imager | Yes | Every industrial 2D imager supports Aztec out of the box. |
| Airline / transit gate reader | Yes (canonical) | This is what Aztec was designed for. Every airport and rail gate reads Aztec reliably. |
| Scandit / Dynamsoft SDK | Yes | Used by most self-service kiosks and airline check-in apps. |
See also
- /aztec-code-generator/ — the Aztec generator.
- Aztec · PDF417 · Data Matrix comparison — side-by-side comparison with the two other non-QR 2D symbologies.
- PDF417 reference — the stacked-linear sibling, for driver licenses and airbills.
- Data Matrix reference — the direct-part-marking sibling, for pharma and electronic parts.
- Standards index — back to the reference hub.