QR code scanability checker
Upload a QR code and get the full 18-point report: what will fail, at what size, and the specific fix for each problem. Free, no account.
Drop a QR code image here
PNG, JPG, SVG or PDF · up to 10MB · your file is analysed and discarded, never stored
A pale grey code with a cropped quiet zone — the single most common reason a printed code fails in the wild.
The checks below are measured. The score they roll up to waits on the print-and-scan calibration study.
This code fails on contrast and quiet zone. Do not send it to print — the fixes below are all cheap and none change the encoded payload.
- Contrast1.7:1fail
Darken the foreground to at least #333333 on white. Below 4:1 the decoder cannot separate modules under real lighting.
The luminance ratio between dark and light modules. Below about 4:1 a camera cannot reliably separate them under indoor lighting, whatever the colours look like on screen. This is the single most common cause of a code that "worked on my monitor" and fails on paper.
- Quiet zone1 modulefail
Add three more modules of clear white margin on all four sides. The spec requires four; anything less and adjacent artwork bleeds into the finder patterns.
The clear margin around the symbol. The spec requires four modules. Designers routinely crop it to nothing to fit a layout, which stops the decoder locating the finder patterns — the code becomes invisible rather than merely hard to read.
- Logo obstructionnonepass
Reduce the logo to 18% of the code area, or switch on excavate mode so modules are cleared rather than covered.
A centred logo destroys modules, and error correction repairs them. EC-M tolerates roughly 15% damage, EC-H about 30% — but that budget is meant for wear, dirt and glare, not for your logo. We report obstruction as a percentage of code area and warn when it eats the margin reserved for the real world.
- Polaritycorrectpass
Modules must be darker than the background. An inverted code — light on dark — is read by some decoders and rejected by many, especially older Android cameras. We also flag colour pairs whose greyscale conversion collapses to near-identical values.
- Saturation / greyscalesafepass
Modules must be darker than the background. An inverted code — light on dark — is read by some decoders and rejected by many, especially older Android cameras. We also flag colour pairs whose greyscale conversion collapses to near-identical values.
- Gradient endpointsn/apass
Rounded and dot styles shrink each module, effectively reducing size and contrast at the edges. Gradients are checked at both endpoints, because a gradient that starts dark and ends pale fails only on one side of the code — which is exactly the kind of defect a visual review misses.
- Background complexityflatpass
- Transparent backgroundnonepass
- Dot-style connectivitysquarepass
Rounded and dot styles shrink each module, effectively reducing size and contrast at the edges. Gradients are checked at both endpoints, because a gradient that starts dark and ends pale fails only on one side of the code — which is exactly the kind of defect a visual review misses.
- Aspect distortionnonepass
- EC headroom6.8%none
Raise error correction from L to M. At 38% obstruction even EC-H would struggle, so fix the logo first.
A centred logo destroys modules, and error correction repairs them. EC-M tolerates roughly 15% damage, EC-H about 30% — but that budget is meant for wear, dirt and glare, not for your logo. We report obstruction as a percentage of code area and warn when it eats the margin reserved for the real world.
- Module size at 25mm0.68mmnone
Print at 34mm or larger, or shorten the payload so the code drops to a lower version with bigger modules.
Divide the printed width by the number of modules. Below about 0.4mm per module, consumer cameras fail at arm’s length. This is what turns "version 4" into a concrete minimum size in millimetres, and it is why payload length is a print decision rather than a technical detail.
- Finder integritynot calibratednone
The three corner squares, the small alignment squares and the dotted rows between them are how a decoder orients and samples the grid. Artistic styling that softens or recolours them causes total failure, not degradation — so these checks are pass/fail rather than scored.
- Alignment integritynot calibratednone
The three corner squares, the small alignment squares and the dotted rows between them are how a decoder orients and samples the grid. Artistic styling that softens or recolours them causes total failure, not degradation — so these checks are pass/fail rather than scored.
- Timing integritynot calibratednone
The three corner squares, the small alignment squares and the dotted rows between them are how a decoder orients and samples the grid. Artistic styling that softens or recolours them causes total failure, not degradation — so these checks are pass/fail rather than scored.
- Payload efficiency39 charsnone
A 39-character URL forces version 4. A short link would fit version 2 and print 40% smaller.
Divide the printed width by the number of modules. Below about 0.4mm per module, consumer cameras fail at arm’s length. This is what turns "version 4" into a concrete minimum size in millimetres, and it is why payload length is a print decision rather than a technical detail.
- Print bleed safetynot calibratednone
Ink spreads on absorbent stock, thickening dark modules and closing the gaps between them. Converting RGB to CMYK also shifts colours, often darkening them. Both are predictable, and both are checked before you commit to a run.
- CMYK shift risknot calibratednone
Ink spreads on absorbent stock, thickening dark modules and closing the gaps between them. Converting RGB to CMYK also shifts colours, often darkening them. Both are predictable, and both are checked before you commit to a run.
- Minimum print size
- 34 × 34 mm, after fixes
- Decoded payload
- https://example.com/summer-sale-2026-lp
- Symbol
- v4 · 33×33 · EC-L · mask 2
- Engine version
How the thresholds will be set
The method is fixed and the results are not in. Nothing on this page is fitted to measured failure rates yet, which is why no score appears above.
- codes generated across the EC × version × colour × logo × style matrix
- not yet measured
- independent decoders — ZXing, ZBar, OpenCV WeChat and a commercial SDK
- not yet measured
- stratified samples physically printed and scanned
- not yet measured
- accuracy of predicted vs measured minimum print size
- not yet measured
Printed at 15, 20, 25 and 40mm on matte and glossy stock, scanned with two iPhone generations, a Pixel, a Samsung, a low-end Android and a desktop webcam, under three lighting conditions. Predicted minimum print size lands within ±15% of the measured failure threshold.
What each check actually measures
Contrast
The luminance ratio between dark and light modules. Below about 4:1 a camera cannot reliably separate them under indoor lighting, whatever the colours look like on screen. This is the single most common cause of a code that "worked on my monitor" and fails on paper.
Quiet zone
The clear margin around the symbol. The spec requires four modules. Designers routinely crop it to nothing to fit a layout, which stops the decoder locating the finder patterns — the code becomes invisible rather than merely hard to read.
Logo obstruction and EC headroom
A centred logo destroys modules, and error correction repairs them. EC-M tolerates roughly 15% damage, EC-H about 30% — but that budget is meant for wear, dirt and glare, not for your logo. We report obstruction as a percentage of code area and warn when it eats the margin reserved for the real world.
Module size versus print size
Divide the printed width by the number of modules. Below about 0.4mm per module, consumer cameras fail at arm’s length. This is what turns "version 4" into a concrete minimum size in millimetres, and it is why payload length is a print decision rather than a technical detail.
Finder, alignment and timing integrity
The three corner squares, the small alignment squares and the dotted rows between them are how a decoder orients and samples the grid. Artistic styling that softens or recolours them causes total failure, not degradation — so these checks are pass/fail rather than scored.
Polarity and saturation
Modules must be darker than the background. An inverted code — light on dark — is read by some decoders and rejected by many, especially older Android cameras. We also flag colour pairs whose greyscale conversion collapses to near-identical values.
Dot-style connectivity and gradient endpoints
Rounded and dot styles shrink each module, effectively reducing size and contrast at the edges. Gradients are checked at both endpoints, because a gradient that starts dark and ends pale fails only on one side of the code — which is exactly the kind of defect a visual review misses.
Print bleed and CMYK shift
Ink spreads on absorbent stock, thickening dark modules and closing the gaps between them. Converting RGB to CMYK also shifts colours, often darkening them. Both are predictable, and both are checked before you commit to a run.
Measured clean but still not working for people? Work out which half failed — or, if a scan lands on an expiry notice, find out who is refusing to resolve it.