How we test QR codes
"Tested" is an easy word to print. This page documents what we actually test, with what tools, and the numbers we got — so the claim is checkable, not decorative.
What every export goes through
Our pipeline validates the four properties that decide whether a printed code survives the real world:
- Decode-back verification. Generated files must decode back to the exact destination entered — verified with independent open-source decoders (ZBar), not with the library that generated them. A generator grading its own homework proves nothing.
- Quiet zone enforcement. Every export ships with the standard-required clear margin around the pattern. We treat a missing quiet zone as a build failure, not a style choice — it is a leading cause of field scan failures.
- Live readability scoring. As you design, the generator scores contrast, data density and correction level, and warns below safe thresholds — before you pay, not after you print.
- Format integrity. SVG exports carry their vector geometry and viewBox (so they scale cleanly in any layout tool); raster exports ship at 2400-4800 px, far above the ~300 DPI print floor.
The destructive tests, with numbers
Validating the pipeline, we pushed real exports until they broke:
- Downscale robustness. Full-resolution exports were progressively reduced and re-decoded. Codes built with maximum error correction, full contrast and intact quiet zone kept decoding down to 140-160 px — the equivalent of a ~1.5 cm print, well under our recommended minimums (2-2.5 cm at close range, distance ÷ 10 beyond). The gap between "still decodes in the lab" and "recommended in the field" is deliberate: glare, angles and wear will spend it.
- Logo occlusion. Codes carrying centered logos — including detailed, multi-color ones — were decoded at every size step above, at correction level H. The reserve holds when the level is right; this is why the generator pushes maximum correction whenever a logo is added.
- Format cross-checks. The same design was decoded from PNG and JPEG exports at multiple scales; PNG is our print recommendation because JPEG compression softens module edges — measurably, at small sizes.
What we do not claim
No test makes a bad decision safe. We cannot make pastel-on-cream contrast scan reliably, rescue a code printed at half its minimum size, or keep a destination page online for you. The safeguards warn; physics decides; your address is yours to maintain.
Reproduce it yourself
Every claim above is checkable without trusting us: scan any preview and read the URL (it encodes this site before payment — by design); buy a file, downscale it, scan it; run it through ZBar or your phone. A permanence product should survive its customers' skepticism. Ours is built to.
Frequently asked questions
Do you test every QR code that customers generate?
The safeguards test every code live: readability scoring (contrast, density, correction level) runs in the browser as you design, and the quiet zone is enforced in every export. The destructive tests documented here validate the pipeline those safeguards run on.
What does 'decoded at 140 pixels' actually mean?
We downscale our full-resolution exports until software decoders fail. Files built with maximum error correction and a full quiet zone still decoded at 140 px — roughly a 1.5 cm print — far below the sizes we recommend, which is the safety margin working as intended.
Why do you use maximum error correction with logos?
A centered logo covers part of the pattern, spending the damage reserve before the real world takes its share. At level H (~30% tolerance) our tests decode logo-bearing codes reliably; at low levels the same design becomes fragile. So the generator recommends H whenever a logo is present.
Can I reproduce your tests?
Yes — that is the point. Scan any preview to verify what it encodes; downscale any purchased file and scan it; decode files with open-source tools like ZBar. Verifiability is the product.
Create a QR code that answers to no server.
Static, permanent, yours. €5 once — no subscription, no expiry, print-ready files.
Create my permanent QR