What is Micro QR?
Micro QR Code is a compact variant of QR Code designed for the small labels and direct-part-marking scenarios where a full QR symbol would be too large. It is defined in Annex 1 of ISO/IEC 18004 - the same standard that defines QR Code - but uses a different layout, a different format-information field, a different mask-pattern set, and a smaller quiet zone.
A Micro QR symbol carries one of four sizes - M1 (11×11 modules) through M4 (17×17 modules) - selected by the encoder based on payload length and error-correction level. The largest M4 symbol holds only 35 digits or 15 bytes - far less than even the smallest full-QR Version 1 - but it does so in a footprint as small as 11×11 modules (around 4 mm square at typical retail print densities).
Used for: direct part marking (DPM) on small components, electronic part labels, asset tags where space is limited, and any application that needs the QR family's ubiquity-in-readers without QR Code's space requirements.
Construction
New to these terms? module , quiet zone , X-dimension , symbology - the linked pages cover each one from first principles.
Symbol structure
A Micro QR symbol is a square grid with a single finder pattern in the top-left corner. The remaining elements are:
- Finder pattern - 7×7 concentric squares at the top-left, identical to full QR's corner finder. The 1:1:3:1:1 dark-to-light ratio along its centre line is what the scanner locks onto.
- Separator - a single-module-wide light border to the right (col 7) and below (row 7) the finder. Stops the data from blurring into the finder.
- Timing patterns - alternating dark/light modules running along row 0 (from column 8 to the right edge) and column 0 (from row 8 to the bottom edge). They let the decoder count modules across the symbol.
- Format information - 15 bits placed around the finder: row 8 cols 1-8 plus col 8 rows 1-7. Encodes the symbol number (M1 / M2-L / M2-M / M3-L / M3-M / M4-L / M4-M / M4-Q) and mask pattern (00-11) using BCH(15,5) XOR-masked with
0x4445. The mask constant is different from full QR's 0x5412 - this is what stops a scanner from misreading a Micro QR as a tiny full QR. - Data and EC modules - everything else. Reed-Solomon parity is appended in a single block (no interleaving - the symbols are too small to make it useful).
- Quiet zone - ≥ 2× X-dimension on all sides (half of full QR's 4×).
Sizes and capacity
Four sizes are defined. Each version supports a subset of EC levels - smaller versions trade error-correction capacity for raw data capacity. The numbers below give the maximum payload at the weakest EC level that version supports (smaller payloads at stronger EC levels).
| Version | Modules | EC levels | Max numeric (digits) | Max alphanumeric (chars) | Max byte (bytes) |
|---|
| M1 | 11×11 | L (Detection only) | 5 | n/a | n/a |
|---|
| M2 | 13×13 | L, M | 10 | 6 | n/a |
|---|
| M3 | 15×15 | L, M | 23 | 14 | 9 |
|---|
| M4 | 17×17 | L, M, Q | 35 | 21 | 15 |
|---|
Source: ISO/IEC 18004:2015 Table 7 (Annex 1). M1 supports only numeric data + Detection-only EC (no Reed-Solomon recovery - only error detection). M2 adds alphanumeric. M3 and M4 add byte (and Kanji) mode.
Mask patterns
Micro QR defines only four mask patterns (vs full QR's eight). Each is a Boolean condition over the module's row i and column j; modules where the condition is true are flipped (dark ↔ light) before placement. The 2-bit mask index goes into the format information field.
| Index | Condition for module (i, j) to be flipped | Full-QR equivalent |
|---|
| 00 | i mod 2 = 0 | mask 1 |
|---|
| 01 | (⌊i/2⌋ + ⌊j/3⌋) mod 2 = 0 | mask 4 |
|---|
| 10 | ((i × j) mod 2 + (i × j) mod 3) mod 2 = 0 | mask 6 |
|---|
| 11 | ((i + j) mod 2 + (i × j) mod 3) mod 2 = 0 | mask 7 |
|---|
Mask selection (opposite direction to full QR)
A subtle but important difference: Micro QR picks the mask with the LARGEST score (full QR picks the smallest penalty). The Micro QR score is computed from the rightmost column and bottom row only:
sum_right = count of dark modules in the rightmost column (excluding (0, size−1))
sum_bottom = count of dark modules in the bottom row (excluding (size−1, 0))
score = min(sum_right, sum_bottom) × 16 + max(sum_right, sum_bottom)
The encoder evaluates this for each of the 4 masks (with format-info applied) and picks the one with the highest score. This rewards masks that put dark modules along the edges - which is what Micro QR scanners use for synchronisation in the absence of the top-right and bottom-left finder patterns.
Error correction
Micro QR shares its Reed-Solomon arithmetic with full QR: same GF(256) field, same primitive polynomial 0x11D. See the Reed-Solomon guide for the algorithm. The difference is that Micro QR symbols are small enough that the data + EC codewords fit in a single Reed-Solomon block - no block interleaving.
M1 is unique in offering only "Detection only" EC: the 2 EC codewords let the scanner detect a corrupted symbol but not recover the data. For applications where M1's 5-digit capacity is enough, the choice between M1 and M2-L often comes down to: do you need actual error recovery, or just an error flag?
X-dimension and quiet zone
Micro QR's 2× quiet zone (half of full QR's 4×) is what lets it print meaningfully smaller than a full QR for the same X-dimension. Combined with the smaller module counts (11-17 vs full QR's minimum 21), an M2 symbol at 0.25 mm X-dimension occupies ~3.25 mm square - small enough to fit on a 1 cm² label with text alongside.