QR Codes
QR code error correction explained
Reviewed by the Tabreon team · Last updated: September 2026
Quick answer
QR codes include built-in redundancy so they still scan even if part of the code is damaged, dirty, or covered by a logo — the amount of redundancy is set by an error correction level from L (7%) to H (30%).
Why this matters
Choosing the right error correction level matters if a code will be printed on an imperfect surface, get worn over time, or have a logo placed in the middle of it.
Definition
Error correction in a QR code works similarly to a checksum with redundancy — extra data is encoded alongside the original content so a scanner can reconstruct the full data even if some modules are unreadable. The standard defines four levels: L (~7% recoverable), M (~15%), Q (~25%), and H (~30%).
How it works
QR codes use Reed–Solomon error correction, the same family of algorithm used on CDs, DVDs, and satellite links, adapted to a two-dimensional grid. Higher error correction levels add more redundant data to that grid, which increases the code's density (and therefore its printed size for the same scan distance) but makes it tolerant of a proportionally larger damaged or obscured area — which is what makes it possible to place a small logo in the center of a QR code without breaking it. The tradeoff compounds with the amount of data encoded: a QR code holding a long URL already has less spare capacity, so pushing it to level H on top of that can make the grid dense enough to be hard to scan at small print sizes.
Error correction levels
| Level | Recoverable damage | |
|---|---|---|
| L | Low | ~7% |
| M | Medium | ~15% |
| Q | Quartile | ~25% |
| H | High | ~30% |
Common mistakes
- Using the lowest error correction level (L) on a code that will be printed on a surface prone to wear or dirt.
- Placing a logo over a QR code without a high enough error correction level to compensate for the coverage.
- Assuming higher error correction has no downside — it makes the grid denser, which can make small codes harder to scan.
Best practices
- Use M or Q for general-purpose printed codes exposed to normal handling.
- Use H only when you specifically need to overlay a logo or expect real wear and tear.
- Test any code with an overlay or expected damage at its actual print size before distributing it widely.
- Keep the encoded data as short as possible (e.g. a short redirect URL instead of a long one) if you also need a high error correction level, since the two compete for the same grid space.
Frequently asked questions
Related tools
Related guides
Sources
- ISO/IEC 18004 — QR Code bar code symbology specification