QR Code Error Correction Explained: L, M, Q, and H Levels

What error correction means for your QR codes and which level to choose for different situations.

One of the most useful features of QR codes is their built-in error correction. Unlike barcodes, which become unreadable if any part is damaged or obscured, QR codes can still be scanned even when a significant portion of the code is missing or corrupted. This is possible because of Reed-Solomon error correction, a mathematical technique that adds redundant data to the code so the original information can be reconstructed even with partial loss.

The Four Levels

Level L — Low (7% Recovery)

Level L can recover data if up to 7% of the code is damaged. This produces the simplest, least dense QR codes with the largest individual modules. Choose Level L when you need the smallest possible code size, when the code will be displayed on screens (where damage is unlikely), or when you're encoding a lot of data and need to keep the code scannable at a reasonable physical size. Level L is ideal for digital displays, clean indoor environments, and short-lived applications.

Level M — Medium (15% Recovery)

Level M is the default for most QR code generators, including QR Forge, and it's the right choice for the majority of use cases. It can recover data if up to 15% of the code is damaged. The balance between error resilience and code density makes it suitable for printed materials in normal conditions — business cards, flyers, product packaging, and signage that will be kept in reasonable condition.

Level Q — Quartile (25% Recovery)

Level Q provides substantial error recovery — up to 25% of the code can be damaged and it will still scan. This level is appropriate when the code will be exposed to moderate wear, handling, or environmental conditions. Think warehouse labels, outdoor signage protected by lamination, or codes printed on materials that might get slightly scuffed or smudged.

Level H — High (30% Recovery)

Level H is the maximum error correction level, recovering data even with 30% damage. This produces the densest QR codes — the most modules packed into the pattern, resulting in the smallest individual modules. Level H is designed for harsh environments: factory floors, outdoor exposure, codes that might be partially covered by dirt or stickers, and codes where you want to overlay a small logo in the center (which effectively "damages" those modules).

How Error Correction Affects Code Size

Higher error correction means more redundant data, which means more modules in the QR code. A URL encoded at Level L might produce a version 2 QR code (25x25 modules), while the same URL at Level H might produce a version 4 code (33x33 modules). At the same physical print size, the higher-level code has smaller individual modules that are harder to scan.

This creates a practical trade-off. If you need the code to be physically small (like on a business card), using Level H might make the modules too small to scan reliably. Conversely, if you have plenty of space (like a poster), using Level H gives you maximum resilience with no downside.

Rule of thumb: If you have control over the code's environment and it won't be damaged, use Level M. If you can't control the environment or need a logo overlay, use Level H but increase the physical size of the code to compensate for the denser module pattern.

Error Correction and Logo Overlays

You've probably seen QR codes with company logos placed in the center. This works because the logo covers modules that the error correction can reconstruct. For a logo overlay to work, you must use Level H (30% recovery), and the logo should cover no more than about 20% of the code area to leave margin for other potential damage. Even with Level H, always test the code with the logo overlay on multiple devices before printing.

QR Forge doesn't add logo overlays (to keep the tool simple and ensure reliable codes), but if you add one manually using an image editor, make sure to generate the code at Level H first.

Choosing the Right Level

For most real-world applications, Level M is the safest default. It provides enough error correction for normal handling and printing imperfections without making the code unnecessarily dense. Only increase to Q or H when you have a specific reason — environmental exposure, expected damage, or logo overlay. And if you're generating QR codes for screen-only use (digital menus, app links, email signatures), Level L keeps the code simple and fast to scan.

Generate QR codes with your choice of error correction level.

Open QR Forge →