QR Code Error Correction Levels Explained (L, M, Q, H)
How QR codes survive damage, and how to pick L, M, Q or H.
By MyQRGenerator team Updated 6 min read
Every QR code contains extra information that lets a scanner recover from damage, dirt or a logo in the middle. This is called error correction, and you choose how much of it to include.
How it works, in plain language
QR codes use Reed–Solomon codes, the same family of error correction used on CDs, DVDs and in deep-space communication. The data is split into blocks, and for each block a number of extra “check” bytes are calculated. If some bytes are unreadable, the scanner solves for them using the check bytes. Roughly, two check bytes can repair one corrupted byte — or one byte at a known location (an “erasure”).
The four levels
| Level | Approx. recovery | Max. text (version 40) |
|---|---|---|
| L (Low) | ~7% | 2,953 bytes |
| M (Medium) | ~15% | 2,331 bytes |
| Q (Quartile) | ~25% | 1,663 bytes |
| H (High) | ~30% | 1,273 bytes |
The percentages are of codewords, not of visible area, and they are approximate. Damage concentrated in one block uses up that block's capacity faster than damage spread evenly.
The trade-off: robustness vs density
Higher levels add more check bytes, so the same content needs a bigger symbol. For example, a typical 40-character URL might fit in version 3 at level L but need version 4 or 5 at level H. Denser codes need to be printed larger to keep modules readable.
Which level should you use?
- L — on-screen codes, very clean conditions, maximum data.
- M — the default for most printed codes.
- Q — outdoor signage, packaging that may get scuffed, small logos.
- H — codes with logos, heavy styling, or harsh environments.
What error correction can't fix
Error correction repairs data modules. It cannot compensate for missing finder patterns (the three corner squares), a missing quiet zone, very low contrast or a blurry photo of a too-small code. And decoration spends the same budget that real-world damage needs. That's why MyQRGenerator never treats level H as a guarantee — it runs an actual decode of your design and warns you if it fails.
Read more: adding a logo safely and why QR codes fail to scan.