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.