Skip to main content
QRGen

QR Code Error Correction Levels Explained

3 min readby QRGen Team

Error correction is what makes QR codes remarkably resilient. Even if a QR code is partially damaged, dirty, or obscured by a logo, it can still be scanned successfully. This is possible because QR codes use Reed-Solomon error correction, a mathematical algorithm that adds redundant data to the code. There are four levels — L, M, Q, and H — each offering a different trade-off between data capacity and damage tolerance.

How Error Correction Works

QR codes use Reed-Solomon error correction, the same algorithm used in CDs, DVDs, satellite communications, and deep-space probes. It works by adding redundant data (called "error correction codewords") alongside the actual content.

When a scanner reads a QR code, it first decodes all the modules, then uses the error correction codewords to detect and fix any errors. If some modules are damaged, missing, or misread, the algorithm can reconstruct the original data — up to a certain percentage, depending on the error correction level.

Think of it like a sentence with extra context: "The c_t sat on the m_t" — even with missing letters, you can figure out "The cat sat on the mat." Error correction works the same way, but with mathematical precision.

The trade-off is that higher error correction means more redundant data, which means more modules, which means a denser, more complex QR code. A QR code with Level H error correction will have roughly 65% more modules than the same content with Level L.

The Four Error Correction Levels

Level L (Low) — 7% recovery Recovers if up to 7% of the data area is damaged. Produces the simplest QR code with the fewest modules. Best for clean, controlled environments like digital screens, high-quality print, and indoor use where the code won't be damaged.

Level M (Medium) — 15% recovery The default for most QR code generators, including QRGen. A solid balance between code complexity and reliability. Suitable for most general use cases: business cards, flyers, brochures, and product packaging.

Level Q (Quartile) — 25% recovery Recovers up to a quarter of the data area. Recommended for outdoor use, packaging that might get wet or scratched, and codes printed on lower-quality materials. Also good for curved surfaces where part of the code might be slightly distorted.

Level H (High) — 30% recovery Maximum error correction. Recovers if up to 30% of the data is lost or obscured. This is the level you need when placing a logo in the center of a QR code, since the logo literally covers part of the data area. QRGen automatically switches to Level H when you upload a logo.

Error Correction and Logos

Placing a logo in the center of a QR code is one of the most popular customizations. It makes the code look branded and professional. But it works only because of error correction.

When you place a logo over the center of a QR code, you're literally destroying some of the data modules. The scanner can still decode the QR code because the error correction algorithm reconstructs the missing data from the redundant codewords.

Rules for logos: - Always use Level H (30% recovery) when adding a logo - The logo should cover no more than 25-30% of the data area (leaving some margin for other types of damage) - Center placement is safest — the finder patterns (corner squares) and timing patterns must remain fully visible - Higher error correction = denser code, so use the shortest URL possible to keep the code clean

QRGen's approach: When you upload a logo in QRGen, the renderer automatically reserves a zone in the center of the QR code where data modules are not placed. The logo is drawn in this clean zone. Combined with forced Level H error correction, this ensures the code is always scannable — the logo doesn't "destroy" modules; they're never rendered in the first place.

Which Level Should You Use?

Use Level L when: - The QR code is on a digital screen (phone, tablet, monitor, TV) - The code will be in a clean, controlled environment - You need the simplest possible code (maximum data, minimum modules) - Every module counts (very long URLs or large text content)

Use Level M when: - General-purpose use (the safe default) - Print materials in good condition (business cards, brochures, posters) - Indoor signage and displays

Use Level Q when: - Outdoor signage (weather exposure) - Product packaging that might get scratched, wet, or handled roughly - Printing on curved surfaces (bottles, mugs, cylinders) - Lower-quality print methods (thermal printing, inkjet on rough paper)

Use Level H when: - You're adding a logo to the center of the QR code (mandatory) - The code will be in harsh environments (construction sites, industrial settings) - Maximum scanning reliability is critical (medical, safety, emergency) - The code might be partially covered (stickers that peel, labels that get dirty)

When in doubt, use Level M. It handles most situations well without making the code unnecessarily complex.

Error Correction and QR Code Versions

QR codes come in 40 versions (1 through 40), with each version adding more modules:

- Version 1: 21×21 modules (smallest) - Version 10: 57×57 modules - Version 20: 97×97 modules - Version 40: 177×177 modules (largest, holds up to 7,089 numeric characters)

The QR code version is automatically chosen based on two factors: the amount of data you're encoding and the error correction level. More data or higher error correction = higher version = more modules.

For example, a 20-character URL with Level L might be Version 2 (25×25 modules). The same URL with Level H might be Version 3 (29×29 modules). A 200-character URL with Level H might jump to Version 8 or higher.

This is why shorter content creates cleaner, simpler QR codes — and why URL shorteners or dynamic QR codes (which encode short redirect URLs) are valuable when visual simplicity matters.

Real-World Damage Scenarios

Here are common scenarios where error correction saves the day:

Scratched packaging — a QR code on a shipping box gets scratched during transit. Level Q or H can handle this.

Wet surfaces — a QR code on an outdoor sign gets rained on, and water droplets obscure some modules. Level Q handles moderate water damage.

Faded print — sunlight causes the QR code ink to fade over time, reducing contrast. Higher error correction helps, but eventually the contrast drops below what any scanner can read. Use UV-resistant printing for outdoor codes.

Partial coverage — a sticker partially covers the QR code, or someone places a cup on top of a table tent QR code. Level H can recover if less than 30% is covered.

Logo overlay — as discussed above, the center of the code is intentionally obscured by a brand logo. Level H is required.

Low-quality print — inkjet printing on rough paper can cause modules to bleed or merge. Error correction compensates for minor printing imperfections.

In all cases, error correction increases reliability but is not magic. If too much of the code is damaged, no level of error correction can save it. Always combine appropriate error correction with good placement and materials.

Summary

Error correction is one of the most important features of QR codes, and understanding it helps you make better choices about code complexity, logo placement, and material selection. For most uses, Level M is a solid default. If you're adding a logo, Level H is required. QRGen handles this automatically — when you upload a logo, Level H is forced and a clean zone is reserved in the center to guarantee scannability.

Ready to create your QR code?

13 content types. 38 style presets. 40+ frames. 5 export formats. Free.

Open QR Generator