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.

Canonical spec: ISO/IEC 24778:2008 — Information technology — Automatic identification and data capture techniques — Aztec Code bar code symbology specification.
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:

Size and capacity

VariantDimensionsMax alphanumeric capacityTypical use
Compact15 × 15 to 27 × 27 modules~110 charsShort URLs, IATA seat assignments
Full-Range (small)19 × 19 to 45 × 45~400 charsBCBP Type M1 boarding passes
Full-Range (medium)49 × 49 to 95 × 95~1,200 charsTransit tickets with multiple segments
Full-Range (max)151 × 151~3,067 charsHeavy 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 levelTypical useTradeoff
5%Experiments / demos onlyFails on any real-world damage. Never ship production codes at this level.
23% (default)Short-URL Aztec on digital displaysMatches QR level M. Standard choice when the reader and environment are both good.
50%IATA BCBP, transit tickets, crumpled paperSurvives a folded corner or a significant smudge. IATA's implicit default.
75%–95%High-abrasion or high-fold environmentsPayload 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}

Canonical test vectors

CasePayloadExpected substring
Short URLhttps://example.com/board/AB12example.com/board/AB12
IATA BCBP minimalM1DOE/JOHN EABC123 JFKLHRBA 0100 042Y034A0001 100M1DOE/JOHN
Transit ticket with segment metadataM1SMITH/JANE EXYZ789 LAXSFOVA 0250 032Y012C0015 147M1SMITH/JANE

Common pitfalls

Scanner compatibility

ReaderAztec supportNotes
iOS Camera (iOS 15+)NoApple has not added Aztec to the native Camera app. Third-party apps with Scandit or Dynamsoft SDKs work.
Android Camera (Google/Pixel)PartialSome OEM camera apps decode; Pixel stock camera does not reliably.
Google LensUnreliableDecodes boarding-pass Aztec inconsistently. Not a viable verification path for production.
Zebra / Honeywell / Datalogic industrial imagerYesEvery industrial 2D imager supports Aztec out of the box.
Airline / transit gate readerYes (canonical)This is what Aztec was designed for. Every airport and rail gate reads Aztec reliably.
Scandit / Dynamsoft SDKYesUsed by most self-service kiosks and airline check-in apps.

See also

Spec references verified 2026-04-19. ISO/IEC 24778:2008, IATA BCBP Resolution 792. Next review: 2026-07-19.