Guides

How QR Codes Survive Damage

By the Laborilo team. Last updated August 20, 2026.

A coffee ring across a printed QR code, or a logo dropped in the middle for branding, looks like it should break the scan, and it's a reasonable thing to worry about before something goes to print. Cover up almost a third of a QR code with dirt, a crease, or a logo, and a decent scanner will still read it correctly. That's not a lucky accident. It's built into the format on purpose.

Built for factories, not phones

QR codes were invented in 1994 by Masahiro Hara at Denso Wave, a Toyota subsidiary, specifically to track automotive parts on the production line faster than the barcodes of the time. A QR code can hold roughly 100x more data than a standard barcode in a similar area, and it can be scanned from any angle instead of one direction. Denso Wave deliberately left the patent unenforced for the core standard, which is a large part of why the format spread far beyond factories into general use.

The error correction is Reed-Solomon codes, the same family used on CDs

QR codes store their data with Reed-Solomon error correction, a mathematical technique that adds redundant data alongside the actual payload so the original can be reconstructed even if part of the code is unreadable. It's the same family of error correction used on CDs and DVDs to survive scratches, and in QR codes it comes in four selectable levels: L (recovers about 7% damage), M (about 15%), Q (about 25%), and H (about 30%). Choosing a higher level adds more redundant data, which means less room for the actual payload at a given code size. A QR code encoding the same URL at level H needs to be physically bigger, or use bigger modules, than the same code at level L.

That tolerance is real, but it isn't infinite, and it's worth being specific about what "up to 30%" actually promises. It's a mathematical ceiling for a given error-correction level, not a guarantee that any smudge or logo automatically stays under it. A stain in the wrong spot, on a code that was generated at a low error-correction level to save space, can break a scan even when the damaged area looks small.

Why a logo in the middle doesn't break the scan

Placing a logo over the center of a QR code works specifically because that area falls within the tolerance of high-level (usually Q or H) error correction. The logo is functioning exactly like a scratch or a smudge that the redundant data is designed to compensate for, not a special feature the format has for logos. Cover too much, in the wrong place, or use too low an error-correction level, and the code stops scanning the same way a badly scratched CD stops playing.

What actually has to survive intact, and what to do about it

Knowing that some damage is tolerated doesn't tell you which damage is safe, and that's where most printing mistakes actually happen. Not every part of the code has equal protection. The three large squares in three corners (finder patterns) let a scanner locate and orient the code regardless of rotation or angle, and damaging those is far more likely to break a scan than damaging an equivalent area of data cells, because the scanner can't even find the code without them. The quiet zone. The blank margin required around the whole code. Matters too: crop it too tight and some scanners can't distinguish where the code starts, independent of how much error correction the data itself has.

If the goal is a code that survives printing small, lamination, or heavy handling, generate it at a higher error-correction level (Q or H) and leave the finder squares and quiet zone completely untouched, that does more for durability than anything else. If the goal is adding a logo for branding, use level H specifically and keep the logo modest in size, since H is built with the most spare capacity to absorb it. And if a code that used to work has stopped scanning, check the quiet zone and the three corner squares first, they're the more common point of failure, not the data itself.

Generate a QR code with the error-correction level that fits how it'll be printed or displayed using the QR code generator.