Every QR code carries built-in insurance: Reed-Solomon error correction that lets a scanner reconstruct data even when part of the pattern is smudged, scratched or covered. That insurance comes in four levels — L, M, Q and H — which can each recover roughly 7, 15, 25 and 30 percent of the code's data. Choosing between them is a trade-off: more robustness means less room for your content or a denser, harder-to-scan pattern.
What error correction actually does
A QR code is more than the black and white grid you see. Alongside the data, the code stores redundant backup information produced by an algorithm called Reed-Solomon coding — the same family of error correction long used on CDs and in digital broadcasting. When a scanner reads the code, some of what it receives may be wrong or missing: a fingerprint turns a black module white, a scratch removes a row, the ink has faded. Reed-Solomon lets the scanner detect those faults and rebuild the missing pieces mathematically. Nothing about the printed code changes; the recovery happens entirely in the decoding software.
The error correction level is fixed at generation time. It is recorded in the code's format information, which scanners read before anything else, so every standard scanner knows how much redundancy to expect. You cannot raise or lower the level after the code exists — the only way to change it is to generate the code again and replace the old one.
The four levels: L, M, Q and H
The QR standard defines four levels, identified by letters:
- L (Low): recovers approximately 7% of the data.
- M (Medium): approximately 15%.
- Q (Quartile): approximately 25%.
- H (High): approximately 30%.
Only Q breaks the initial-letter pattern; "quartile" reflects its roughly one-quarter recovery figure.
Two clarifications matter. First, the percentages do not mean the code survives losing 7% or 30% of its surface area. They refer to codewords — the data units the code is built from — and recovery depends heavily on where damage falls. Second, the figures are approximate and describe what the mechanism can recover under favourable conditions; they are not a guarantee. If damage destroys structural elements such as the three large finder squares in the corners or the timing patterns between them, no level will save the code, because those parts are not backed up the way data is.
What the percentages mean for dirty and damaged prints
Real damage comes in two flavours, and they behave very differently.
Scattered light damage — fingerprint grease, a splash of coffee, slight fading, general wear from handling — corrupts bits across many codewords. This is exactly what Reed-Solomon handles best. Level M usually shrugs it off completely; level L may already struggle, since its 7% budget fills quickly.
Concentrated heavy damage — a torn corner, a sticker slapped over part of the code, a hole punch, a deep gouge — is the harder case. Localised damage wipes out consecutive codewords in one region, so a tear covering far less than 30% of the surface can still finish off an H code, especially if it clips a finder pattern. Treat the published percentages as a description of well-spread damage, not a promise against a rip through the middle.
It is also worth knowing what error correction cannot fix at any level: blur, poor contrast, glare, a smudged camera lens or a missing quiet zone (the clear margin around the code). Those are capture problems, not data loss, and no redundancy budget will compensate for them.
Logos and styling: why H is the standard choice
Placing a logo in the middle of a QR code deliberately covers modules — you are spending the damage budget before the code ever meets a printer. With L or M that is a gamble; with H, the roughly 30% redundancy leaves enough headroom that a modest logo can sit safely in the centre. This is why logo-overlaid codes are almost always generated at level H.
Working rules of thumb for logo codes:
- Keep the logo small — about a quarter of the code's width or less is a common guideline.
- Never cover the three finder squares or the quiet zone.
- Prefer solid, opaque logo backgrounds over translucent ones, which confuse the black-and-white reading.
- Test-scan a printed proof, not just the screen version, before committing to a print run.
The mechanics are worth understanding: the scanner reads the pattern around the logo, and error correction reconstructs the hidden modules. If the logo is too large, the recovery budget is exhausted and the code simply fails — even though it looks perfectly normal to the eye.
The trade-off: robustness versus density
Redundant data has to live somewhere, and that is where the trade-off bites. For the same content, a higher level means more codewords devoted to backup, which has two possible consequences.
First, less room for your payload at a given code size. A code generated at H holds noticeably less text than the same version at L, so longer URLs or messages may simply not fit.
Second, a larger and denser pattern. If the payload does not fit, the generator moves the code up a version — more modules in the grid, and therefore smaller modules at the same printed dimensions. Smaller modules demand sharper printing and closer, steadier scanning. A long URL that sits comfortably in a modest-sized L code may become a visibly denser Q or H code at the same physical size, and on a business card that can be the difference between effortless scanning and failure.
The reverse also holds: choosing H for a clean on-screen code buys almost nothing. Screens do not smudge, and the density penalty is real. Match the level to the conditions the code will actually face.
How to choose: a practical guide
- L — clean, controlled conditions and short content: on-screen codes, large signage where the code can be printed big, or when you need maximum capacity in minimum size.
- M — the sensible default for everyday print: flyers, menus, brochures, handouts. A good balance of robustness and density.
- Q — public-facing print that gets handled: tickets, packaging, shelf labels, anything likely to see wear or light soiling.
- H — harsh or dirty environments, rough handling, fabric or low-quality printing, and any code with a logo overlay.
When in doubt: M for plain codes, H for logo codes. Most generators — including QRCodeMax.Vip — let you set the level before you download, so it costs nothing to produce two versions and compare their size and scanability.
Common mistakes worth avoiding
- Assuming H makes scanning "better" in general. It adds redundancy, not range or speed; an oversized, dense H code can scan worse than a larger, sparser M code.
- Covering the quiet zone or finder patterns and expecting error correction to compensate. It will not.
- Choosing L to keep the code small, then printing it tiny anyway. Print size and contrast cause more scanning failures than a modest error correction level.
- Skipping the test scan. The level is invisible on the finished code; the only way to verify it is to scan — ideally a printout that has been through the crumpling, wiping and handling it will face in real use.
Conclusion
Error correction is a dial between toughness and density. L recovers about 7% of damaged data, M about 15%, Q about 25% and H about 30%, and each step up costs data capacity or pattern size. Choose M for everyday print, H for logos and rough conditions, and L only when space is tight and conditions are clean — then always test-scan the final printed result.