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.