Guide
QR code error correction levels explained: L, M, Q and H
Every QR code generator has a setting called error correction, usually a choice of L, M, Q or H, and most people leave it where it is. It decides how much of a code can be dirty, scratched, covered by a logo or badly printed and still scan. Knowing what it does takes five minutes and saves reprints.
What error correction is
A QR code stores its content as a sequence of bytes, and then adds extra bytes computed from them with a Reed–Solomon code, the same family of mathematics that lets a scratched CD play and a deep-space probe be heard. The extra bytes let a scanner reconstruct a limited number of bytes it could not read. The pattern you see is the data and the correction bytes laid out together, which is why a code can lose modules anywhere, not just in one place, and still decode.
The four levels
- L (low): about 7 percent of the code can be unreadable. The smallest code for a given content.
- M (medium): about 15 percent. The default in most generators, including ours, and a sensible one.
- Q (quartile): about 25 percent. For codes that will be handled, weathered or printed on rough material.
- H (high): about 30 percent. For codes with a logo in the middle, and for anything that must survive real damage.
What a higher level costs
More correction means more bytes, and more bytes mean more modules. A code holding the same content at H has noticeably more modules per side than at L, so at the same printed size its modules are smaller and harder for the camera to resolve. That is the trade: H survives more damage per module but needs a bigger print to be read at all. For a long static address the difference is real. For a dynamic code, whose content is a short link of a few dozen characters, the code is small at every level and the difference hardly matters, which is one more reason to prefer a dynamic code for print.
Which level to choose
- On a screen, in an e-mail, on a slide: L or M. Nothing will damage it, and the smaller code is easier to read from a photo of a screen.
- On paper that will be handled, mailed or stuck on a wall: M or Q. Creases and dirt are the normal case.
- Outdoors, on packaging, on equipment, on anything that gets wet or scraped: Q or H.
- With a logo in the middle, at any size and on any surface: H, and keep the logo to about a fifth of the code. The logo is damage you chose; the level has to cover it and the real damage still to come.
- Printed very small, close to the two-centimetre floor: M, and resist H. At that size the extra modules cost more than the extra correction returns, unless there is a logo, in which case the code should be bigger anyway.
What error correction cannot fix
The level recovers modules the camera could not read. It does nothing about a camera that cannot find the code in the first place. The three large corner squares, the finder patterns, must be intact and visible; so must the quiet zone, the empty margin around the code. A logo, a sticker or a border over a corner square defeats any level. Low contrast is the same: if the whole code is pale grey on white, every module is uncertain, and no amount of correction helps. The level buys tolerance for local damage, not for a code that was wrong everywhere.
How to set it in QR Solutions
The generator defaults to M. From Starter, the level is a four-way switch, L, M, Q, H, in the advanced colour settings, next to the corner colours; it applies to PNG and SVG downloads alike, and the preview redraws when you change it, so you can see the code grow by a step. Set H when you add a logo. The level is part of the design, not of the destination: changing it later changes how the next download looks and leaves the code's redirect untouched.
Frequently asked questions
Which error-correction level is the default?
M, in QR Solutions and in most generators. It survives about 15 percent damage and keeps the code compact.
Should I always pick H to be safe?
No. H makes the code denser, which hurts small prints and screen photos. Pick H for logos and rough conditions, M for the rest.
Does a higher level make the code slower to scan?
Not noticeably. The decoding is instant; what slows a scan is a dense code printed small, which a high level makes slightly worse.
Can I change the level after the code is printed?
The next download will use the new level; printed copies keep the old one. A reprint is needed for them, as for any design change.
Does the level affect a dynamic code's destination?
No. It is part of the design. The destination is a separate setting and can be changed at any time without touching the design.