QR code error correction and minimum print size
Paolo Matias Tonello9 min read
Every QR code is generated with a chosen error correction level and a version (grid size) that scale together. Get either wrong for the print job and you end up with a code that's technically valid and practically unscannable from across a room.
The four Reed-Solomon error correction levels
QR codes use Reed-Solomon error correction, the same family of algorithm used on CDs and in satellite links, to rebuild data even when part of the code is damaged, dirty or obscured. ISO 18004 defines four levels, each trading data capacity for damage tolerance:
| Level | Approx. recoverable damage | Typical use |
|---|---|---|
| L (Low) | ~7% of codewords | Maximum data capacity, clean digital display |
| M (Medium) | ~15% of codewords | Default for most general-purpose codes |
| Q (Quartile) | ~25% of codewords | Industrial/outdoor labels, moderate wear |
| H (High) | ~30% of codewords | Logos overlaid, packaging, harsh handling |
Higher EC levels don't come free: the same content requires more redundancy codewords at level H than at level L, which pushes the QR version (grid size) up and shrinks the individual modules at a fixed physical print size. Choosing H "just in case" on a long URL is often exactly what turns a scannable code into a dense pattern that fails at small sizes.
Versions 1-40 and why more data means smaller modules
QR has 40 defined versions. Version 1 is a 21x21 module grid; each version up adds exactly 4 modules per side, up to version 40 at 177x177 modules. A short redirect link might fit in version 2-3 (25x25 to 29x29) at EC level M. A long URL with UTM parameters, or a vCard with a full address and multiple phone numbers, can easily push into version 8-10 or higher.
The consequence is mechanical: if you print two codes at the same physical width, say 3 cm, but one is version 3 and the other is version 12, the version 12 code has roughly four times as many modules packed into the same space. Each module is proportionally smaller, so it's far more sensitive to ink spread, camera resolution and scan distance.
The scan-distance rule of thumb
The standard rule used across the print and signage industry is that the minimum readable side length of a QR code should be roughly one tenth of the intended scan distance. A code meant to be scanned from a metre away needs a side of about 10 cm; one meant to be read from 30 cm away, such as a menu on a table, only needs about 3 cm.
| Intended scan distance | Minimum code side |
|---|---|
| 30 cm (menu, product label) | 3 cm |
| 50 cm (counter, desk sign) | 5 cm |
| 1 m (poster, door sign) | 10 cm |
| 2 m (retail window, shelf talker) | 20 cm |
| 5 m (storefront, event banner) | 50 cm |
| 10 m (billboard, building signage) | 1 m |
This rule assumes decent contrast (dark modules on a light background, no low-contrast color pairs) and a modern smartphone camera with autofocus. Poor lighting, glare, a low-end camera, or a busy background image behind the code all erode the margin — treat the table as a floor, not a guarantee, and size up when conditions are uncontrolled.
Module size guidance and the print process floor
Beyond the overall code size, the individual module size matters on its own. As a practical floor, offset and laser printing on good stock can reliably reproduce modules down to about 0.3-0.4 mm per side. Thermal printing and inkjet on porous or textured stock like cardboard need a larger floor, typically 0.5-0.75 mm per module, because ink spreads more on absorbent surfaces and thermal heads have coarser resolution.
- Offset / laser on coated stock: modules down to ~0.3-0.4 mm are usually safe
- Inkjet on uncoated or cardboard stock: keep modules at 0.5 mm or larger
- Thermal label printers: keep modules at 0.5-0.75 mm to absorb head resolution limits
- Always keep a quiet zone of at least 4 modules of blank space around the code
The quiet zone — a clear margin equal to at least 4 modules on all sides — is part of the ISO spec, not a stylistic choice. Scanners use it to detect where the code starts and stops. Crop it too tight, or place the code right against a busy edge or a fold line, and detection fails even when every module inside the code is printed perfectly.
Vector beats raster for print, every time
A QR code is fundamentally a grid of sharp-edged squares, which makes it a perfect candidate for vector formats. SVG and PDF describe each module as exact geometry, so the code scales to any print size — a business card or a billboard — with perfectly crisp edges and no interpolation. Qreator exports both SVG and high-resolution PNG for exactly this reason: use SVG whenever the print size isn't fixed in advance or the file goes to a professional printer.
If a raster PNG is unavoidable — some packaging software or template tools only accept raster — export at 300 DPI or higher at the final print size, and never resize a low-resolution PNG upward afterward. Resampling introduces blur at module edges, and blurred edges are exactly what error correction has to fight against, eating into the damage margin you thought you had.
Ink spread, dot gain and curved surfaces
Porous stock causes dot gain: ink physically spreads slightly beyond the intended module boundary, which can bleed adjacent light modules into darker ones at very small sizes. This is a second reason to keep a margin above the theoretical module floor for uncoated paper or cardboard. Curved or cylindrical surfaces — bottles, cups, cans — introduce their own distortion because the code is no longer flat to the camera's plane; keep codes on curved packaging larger than the flat-surface minimum and, where possible, place them on the flattest available panel.
Which EC level to pick for real jobs
For laminated menus and indoor signage handled gently, EC level M is usually the right balance: enough tolerance for glare and minor print imperfection without inflating the version unnecessarily. For product packaging that goes through warehouses, shelves, and possibly gets partially covered by a price sticker, EC level Q or H is worth the extra module density, especially if you're also placing a logo in the centre of the code, which itself consumes part of the damage budget. For small stickers on curved or worn surfaces, EC level H combined with a slightly larger-than-minimum print size gives the most margin against everything — dirt, scratches, glare and curvature — working against the scan at once.
Put it into practice
Keep reading
- QR code design: contrast, quiet zone and logosThe design rules that decide whether a QR code scans on the first try or not at all, from contrast ratios to logo placement.
- Why QR codes stop working (and how to avoid it)Most "broken" QR codes are fine — the destination behind them, or the print job around them, is what actually failed.
- How to fix a blurry QR code, step by stepFour checks fix almost every blurry QR code: find where the blur came from, re-export at the right DPI, verify size and contrast, then re-test the print.