# QR code vs MaxiCode

> MaxiCode is a fixed-size 2D code - about 25 x 25 mm, 866 hexagonal modules around a central bullseye - designed by UPS in 1992 for high-speed parcel sortation. It holds roughly 93 characters. Unless you are printing UPS shipping labels you will never need one; use a QR code.

Source: https://useqr.app/docs/basics/qr-code-vs-maxicode · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The comparison

| | QR code | MaxiCode |
|---|---|---|
| Standard | ISO/IEC 18004 | ISO/IEC 16023 |
| Origin | Denso, 1994 | UPS, 1992 |
| Module shape | Square | **Hexagonal** — 866 of them |
| Physical size | Any — scales with version and module size | **Fixed: roughly 25 × 25 mm (1 inch)** |
| Capacity | Up to 7,089 digits / 2,953 bytes | About 93 characters |
| Finder | Three corner squares | Central bullseye of concentric rings |
| Error correction | Selectable, 7–30% | Reed-Solomon, two grades (SEC/EEC) |
| Who reads it | Every phone, every imager | Conveyor scanners in parcel hubs |
| Who generates it | Anyone | Shipping systems, almost exclusively for UPS |

## A code built for one job

MaxiCode makes sense only once you picture its habitat: a parcel moving along a conveyor
at several metres per second under a fixed camera array. Every design choice follows from
that.

**Fixed size.** Scanners at a known distance need a known target. MaxiCode does not scale —
the symbol is defined at about one inch square, always, so the optics never refocus.

**Hexagonal modules.** Hexagons pack more tightly than squares, squeezing usable data into
the small fixed area.

**Central bullseye.** Like Aztec's, the concentric-ring finder is locatable at any rotation
in a single pass — but MaxiCode's is optimised for detection at conveyor speed, with the
data arranged radially around it.

**Structured payload.** In its primary modes (2 and 3), MaxiCode does not carry free text
but a *structured carrier message*: postal code, three-digit country code and service
class, packed in a fixed layout the sorter reads first. The secondary message carries the
rest. It is a machine's shipping manifest, not a link for a human.

The trade-off is capacity: roughly **93 characters**, about 3% of a QR code's byte
ceiling. For sortation, that is plenty.

## Why you will never choose it

MaxiCode is an open ISO standard, but in practice it is UPS infrastructure: their labels
carry it, their hubs read it, and effectively nothing else does. No phone camera decodes
it. No consumer use case fits a fixed one-inch symbol holding 93 characters. Even in
logistics, anyone not printing UPS-routed labels reaches for
[Data Matrix](/docs/basics/qr-code-vs-datamatrix), Code 128 or QR — the label formats and
their trade-offs are covered under [QR codes on shipping labels](/qr-codes-on/shipping-labels).

If you are generating codes for humans to scan — a [URL](/url-qr-code),
[WiFi credentials](/wifi-qr-code), a [payment](/upi-qr-code) — the choice was never really
between QR and MaxiCode. The one situation where MaxiCode appears in your life is a
shipping platform emitting it automatically onto a UPS label, correctly, without asking you.

## FAQ

### What is the bullseye barcode on shipping labels?
That is a MaxiCode, the fixed-size hexagonal symbology UPS designed in 1992 for high-speed parcel sortation. The concentric rings let conveyor scanners locate it at any rotation while packages move at speed.

### Can a phone scan a MaxiCode?
Not with any stock camera app, and only rarely with specialist apps. MaxiCode is read by industrial conveyor scanners in parcel facilities; it was never intended for consumer devices.

### How much data does a MaxiCode hold?
About 93 characters, structured primarily as a shipping manifest of postal code, country code and service class. That is roughly 3% of a QR code's 2,953-byte maximum.

### Should I ever use MaxiCode instead of a QR code?
Only if you are producing UPS shipping labels, in which case your shipping software generates it for you. For every human-facing or general logistics purpose, QR or Data Matrix is the correct choice.

## Try it

- https://useqr.app/url
- https://useqr.app/text
