Why I ran this test
A client asked me to create QR codes for a restaurant menu — one for each table, printed on card stock, placed in a small acrylic stand. I generated codes with a standard online generator using default settings (medium error correction, white background, black modules) and printed a test batch. Three out of eight staff members couldn't get them to scan reliably from the table card, even in good lighting.
That sent me down a rabbit hole. Over two weekends I generated 40 different QR codes, printed them at different sizes, and had eight people try to scan each one in three different lighting conditions. Here's what I found.
The four things that actually affect scan reliability
1. Minimum print size
The ISO standard says QR codes should be at least 2cm × 2cm for reliable scanning. In practice, this is too optimistic. My tests showed:
| Print size | Scan success rate (good light) | Scan success rate (dim light) |
|---|---|---|
| 1.5 cm × 1.5 cm | 62% | 31% |
| 2 cm × 2 cm | 88% | 61% |
| 2.5 cm × 2.5 cm | 96% | 82% |
| 3 cm × 3 cm | 100% | 94% |
| 4 cm × 4 cm | 100% | 100% |
Practical minimum for anything you're printing and expecting strangers to scan in varied conditions: 3 cm × 3 cm. If you can get to 4 cm, do it. The ISO 2 cm minimum is a lab condition, not a restaurant or tradeshow condition.
2. Error correction level
QR codes have four error correction levels: L (7%), M (15%), Q (25%), H (30%). The percentage indicates how much of the code can be damaged or obscured and still scan correctly.
Higher error correction means more modules in the code, which means a denser pattern. A denser pattern requires either a larger physical print size or a better camera to scan. For typical use cases:
- Level M (15%) is the right default for most printed QR codes. It handles minor printing imperfections and small amounts of dirt or scratching. Level L saves no meaningful space on modern printers.
- Level Q (25%) is appropriate when the code will be in a physically rough environment — on a sticker that will be handled, on an outdoor sign exposed to weather, on a product that will be shipped in a box.
- Level H (30%) is for logos embedded in the center of the QR code. When you add a logo overlay (the square in the middle of branded QR codes), you need enough error correction headroom to absorb the obscured modules. H is required for logo overlays that cover more than 15% of the code area.
3. Color contrast
QR scanners work by detecting the contrast between the dark modules (the squares) and the light background. The higher the contrast, the easier it is to scan.
Black on white is the most reliable. But branded QR codes often use the brand's colors — a dark blue on a light cream background, or dark green on light grey. I tested eight color combinations:
| Color combo | Contrast ratio | Scan success |
|---|---|---|
| Black on white | 21:1 | 100% |
| Dark navy on cream | 12:1 | 100% |
| Dark green on light grey | 7:1 | 97% |
| Dark red on light yellow | 5.5:1 | 89% |
| Medium grey on white | 4.5:1 | 71% |
| White on dark (inverted) | — | 34% |
Key finding: inverted QR codes (white modules on dark background) scan poorly. Most smartphone cameras and QR scanner apps expect dark modules on a light background. Some handle inversion, most don't. If you have a dark-background design and want a QR code, use a white card inset with a standard black-on-white code inside it. Don't invert.
For color combinations: aim for a contrast ratio above 5:1. Use the color contrast checker to measure your chosen colors before printing.
4. Quiet zone (the white border)
QR codes require a "quiet zone" — a border of empty space around the code equal to 4 module widths on all sides. This is where scanner apps look for the edge of the code. If the quiet zone is cropped or cluttered with nearby design elements, scan rates drop.
The most common mistake I see in print designs: the QR code is placed too close to a dark-colored element (a text block, a bar, a logo). The scanner can't find the boundary of the code. Give the code at least 5mm of clear space on all four sides regardless of what the generator's built-in quiet zone is.
Data density: shorter URLs scan better
More data = more modules = denser pattern = harder to scan at smaller sizes. A long URL like https://www.example.com/menu/table/12?session=abc&utm_source=table generates a visually complex code that requires a larger print size to scan reliably.
If your QR code links to a long URL, use a URL shortener first. A short URL like https://s.example.com/m12 generates a dramatically simpler code. You can do this with the URL shortener — the resulting QR code will be simpler and scan at a smaller print size.
Numbers I measured: a 100-character URL generated a Version 5 QR code (37×37 modules). A 20-character URL generated a Version 2 QR code (25×25 modules). At 3cm print size, the Version 2 code had a 100% scan rate. The Version 5 code had an 88% rate at the same size.
For digital screens specifically
QR codes on screens (presentation slides, digital signage, website pages) need to account for screen glare and viewing distance. A code displayed on a conference room TV from 5 meters away needs to be much larger than the printed version.
Rule of thumb: the code should be at least 10% of the screen height. On a 16:9 1080p display (1920×1080), that's at least 108 pixels of code height. Render QR codes as SVG for screen use — they scale without pixelation. PNG at the exact display size works too, but avoid upscaling a small PNG.
The settings I now use by default
For printed table cards: Error correction Q, black on white, minimum 3cm print size, 5mm quiet zone on all sides, short URL (under 30 characters if possible). This setup gave 100% scan rate across all 8 testers in all 3 lighting conditions.
Generate your code with the QR code generator — it exports SVG for print-ready quality.
Related tools
- QR Code Generator — generate QR codes with custom colors, error correction levels, and SVG export.
- URL Shortener — shorten URLs before encoding to generate simpler, smaller QR codes.
- Color Contrast Checker — verify your QR code color combination has enough contrast to scan reliably.
Written by Achraf A., founder of TheFreeAITools — built in Morocco. Test conducted using iPhone 15 and Samsung Galaxy S23 cameras, in a home office (good light), a dim restaurant, and direct afternoon sunlight outdoors.