The Problem: When QR Codes Stop Working
You printed 500 QR codes for an event, and half of them won't scan. The ink smudged, the paper got wet, or someone placed a sticker over part of the code. Sound familiar? This is exactly the problem QR code error correction was designed to solve.
Every QR code contains built-in redundancy — extra data that lets a scanner reconstruct the original information even when part of the code is damaged, dirty, or obscured. But not all QR codes are equally resilient. The error correction level you choose when generating a QR code determines how much abuse it can take and still work. Choose the wrong level, and your QR code fails in the real world. Choose the right one, and it survives rain, scratches, folds, and even a logo placed on top of it.
In this guide, we'll break down how QR code error correction works, what each level means, and exactly when to use each one — so your QR codes scan reliably every time.
What Is QR Code Error Correction?
QR code error correction is a mechanism that allows a QR code to be read correctly even when part of it is damaged, dirty, or obscured. This is achieved using Reed-Solomon error correction, a mathematical algorithm originally developed in 1960 for data transmission in noisy environments — think satellite communication and CD audio playback, where signal loss is expected.
Here's how it works in simple terms: when you encode data into a QR code, the encoder doesn't just store your raw data. It also calculates and stores additional mathematical values called error correction codewords. These codewords are like a checksum on steroids — they contain enough information to not only detect that something is wrong, but to actually reconstruct the missing or corrupted data.
Imagine you're sending a message and you repeat every word three times. If one repetition gets garbled, the receiver can still figure out the original word by comparing the other two. Reed-Solomon works on a similar principle, but far more efficiently — it uses polynomial mathematics over finite fields to pack maximum recovery power into minimal extra data.
In a QR code, the error correction codewords are interleaved with the data codewords across the entire symbol. This means that if damage is concentrated in one area (like a coffee stain in the corner), the error correction data is distributed enough to recover the lost information. This is a critical design choice — it's why QR codes survive localized damage much better than simple checksums would allow.
The Four Error Correction Levels
The QR code specification defines four error correction levels: L, M, Q, and H. Each level provides a different percentage of damage recovery, and each comes with a tradeoff in data capacity. Here's what each level means:
Level L — Low (7% Recovery)
Level L can recover from up to 7% of the QR code being damaged. It adds the least amount of redundant data, which means you can fit more actual data into the same QR code size. Level L is the right choice when the QR code will live in a clean, controlled environment and you need maximum data capacity in a compact symbol.
Typical use cases: digital displays, email signatures, website-embedded QR codes, or any situation where the QR code will be shown on a screen and scanned immediately.
Level M — Medium (15% Recovery)
Level M can recover from up to 15% damage. This is the default level used by most QR code generators, including the ISO standard recommendation for general-purpose use. It provides a solid balance between data capacity and damage resilience — enough redundancy to handle typical printing imperfections, minor scuffing, and everyday wear.
Typical use cases: business cards, flyers, product packaging, event tickets, restaurant menus — essentially any printed QR code that will be handled by people but not subjected to extreme conditions.
Level Q — Quartile (25% Recovery)
Level Q can recover from up to 25% damage. This is where QR code redundancy starts to get serious. Level Q can handle significant damage — a quarter of the QR code could be unreadable and the scanner still recovers the full data. This makes it ideal for outdoor and industrial environments where QR codes face real physical stress.
Typical use cases: outdoor signage, billboards, warehouse labels, shipping containers, construction sites, and any environment where the QR code will be exposed to weather, dust, or rough handling.
Level H — High (30% Recovery)
Level H can recover from up to 30% damage — the highest level of QR code redundancy available. Nearly a third of the QR code can be damaged, obscured, or altered, and the scanner will still decode the data correctly. This level is essential in two critical scenarios: when you're embedding a logo on top of the QR code, and when the QR code must work in extreme conditions.
Typical use cases: logo-embedded QR codes, industrial environments, medical equipment labeling, financial applications, security badges, and any scenario where scanning failure is not an option.
How Much Damage Can Each Level Handle?
The recovery percentages sound abstract, so let's make them concrete. If you have a QR code that's 100 modules wide and 100 modules tall (10,000 modules total), here's what each level can survive:
- Level L (7%): Up to 700 modules can be damaged — roughly the area of a small fingerprint or a thin scratch across the code.
- Level M (15%): Up to 1,500 modules can be damaged — about the area of a coffee cup ring or a small sticker placed on the code.
- Level Q (25%): Up to 2,500 modules can be damaged — roughly a quarter of the code could be torn, faded, or covered, and it still scans.
- Level H (30%): Up to 3,000 modules can be damaged — you could place a logo in the center covering nearly a third of the QR code, and it still works.
Real-world examples: we've seen Level H QR codes survive being printed on crumpled flyers, stamped on shipping labels that got rained on, and even QR codes with a company logo covering the entire center. The key is choosing the right level before you generate the code.
When to Use Each Level — A Practical Guide
Choosing the right error correction level isn't about always picking the highest one — it's about matching the level to your actual use case. Here's a practical decision framework:
- Digital-only QR codes (websites, emails, social media): Level L is fine. The QR code will be displayed on a screen and scanned immediately — no physical damage risk. You get the benefit of a smaller, faster-scanning code with maximum data capacity.
- Indoor printed materials (business cards, flyers, brochures): Level M is the sweet spot. It handles normal printing imperfections and minor wear, while keeping the QR code compact enough for business cards and flyers.
- High-traffic printed materials (event badges, table tents, product labels): Level Q provides extra insurance. These QR codes get handled frequently, might get smudged, or could be partially obscured by labels or lamination.
- Outdoor signage (billboards, posters, street signs): Level Q or H. UV fading, rain, wind, and general weathering degrade outdoor QR codes over time. The extra redundancy buys you months of additional scanning life.
- Logo-embedded QR codes: Level H — no exceptions. When you overlay a logo on a QR code, you're covering data modules. Level H's 30% recovery capacity compensates for the covered area.
- Industrial or harsh environments (warehouses, factories, medical): Level H. When scanning failure could mean a missed shipment, a medical error, or a security breach, you need maximum reliability.
When you generate a QR code with QREndlessPro's Generator, you can choose any error correction level. And if you're adding a logo with the Customizer, Level H is applied automatically — so you never have to worry about the math.
Error Correction and Logo Embedding
One of the most common reasons people need Level H error correction is logo embedding. When you place a logo in the center of a QR code, you're literally overwriting data modules with your brand image. The scanner sees this as "damage" — modules that don't match the expected data pattern.
Here's the critical detail: the logo must not exceed approximately 20-25% of the total QR code area. Even at Level H (30% recovery), if your logo covers too much of the code, you'll exceed the recovery capacity and the QR code becomes unreadable. The QREndlessPro Customizer enforces this limit automatically — it sizes the logo correctly and applies Level H error correction so your branded QR code always scans.
There's another subtlety: the logo should be placed in the center of the QR code, never over the three finder patterns (the large squares in the corners) or the timing patterns. The finder patterns are what the scanner uses to locate and orient the QR code — if they're obscured, no amount of error correction will help. The center of the QR code is the safest place for a logo because it contains only data and error correction modules, which the Reed-Solomon algorithm can reconstruct.
If you want to learn more about creating visually appealing QR codes with logos, check out our guide on Creative QR Code Designs That Get Scanned.
Error Correction vs. Data Capacity — The Tradeoff
There's no free lunch with error correction. The redundant data has to go somewhere, and it comes at the cost of data capacity. Here's how the tradeoff works:
At a given QR code version (size), higher error correction levels mean fewer data codewords and more error correction codewords. The total number of modules stays the same — you're just allocating more of them to redundancy instead of actual data. This means:
- A QR code at Level L can store more data than the same-size QR code at Level H. For example, a Version 10 QR code (57×57 modules) can hold roughly 286 bytes of data at Level L, but only about 122 bytes at Level H.
- Alternatively, encoding the same data at Level H requires a larger QR code than at Level L. A short URL that fits in a Version 3 QR code at Level L might need a Version 5 QR code at Level H.
- Larger QR codes are harder to scan at small print sizes. If you're printing a QR code on a business card, a Version 5 QR code at Level H might be too dense to scan reliably at 2cm × 2cm, while a Version 3 QR code at Level L would scan easily.
The practical takeaway: don't default to Level H for everything. If your QR code contains a short URL and will be displayed on a screen, Level L gives you a smaller, faster-scanning code. Save Level H for when you actually need the damage recovery — logo embedding, outdoor printing, or harsh environments. Need help deciding? Our How QR Codes Work guide covers the encoding process in detail.
How to Check Your QR Code's Error Correction Level
If you have an existing QR code and want to know what error correction level it was generated with, you can use the QREndlessPro Decoder. Upload the QR code image, and the decoder will extract the full data along with metadata including the error correction level that was used.
This is especially useful when:
- You inherited a QR code from a colleague and don't know what level was used
- You're troubleshooting a QR code that won't scan and want to check if the error correction level is too low
- You want to verify that a vendor actually used Level H for your outdoor signage as requested
- You're auditing QR codes across your organization for consistency
If you discover that a QR code was generated at a low error correction level and needs upgrading, you can use the QREndlessPro Enhancer to regenerate it at a higher level. The Enhancer takes your existing QR code, decodes it, and re-encodes it at the error correction level you choose — producing a fresh, more resilient QR code with the same data.
For bulk operations, the Bulk Generator lets you set the error correction level for hundreds of QR codes at once. And for format conversion (say, PNG to SVG for print), the Converter preserves the error correction level during conversion.
Frequently Asked Questions
What is the best error correction level for QR codes?
There is no single "best" level — it depends on your use case. Level M (15% recovery) is the standard default and works well for most printed QR codes. Use Level L for digital-only codes, Level Q for outdoor signage, and Level H for logo-embedded QR codes or harsh environments. The key is matching the level to the physical conditions the QR code will face.
Can a QR code with 30% damage still scan?
Yes, if the QR code was generated at Level H error correction. Level H can recover up to 30% of the codewords being damaged or unreadable. However, this 30% refers to the data and error correction codewords, not the finder patterns. If the three corner finder patterns are damaged, the scanner cannot locate the QR code at all, regardless of error correction level.
Why does my QR code become larger when I use higher error correction?
Higher error correction levels require more redundant data (error correction codewords) to be stored alongside your actual data. If you're encoding the same amount of data, the QR code needs more modules (squares) to fit everything, which makes it larger. Alternatively, if you keep the same QR code size, the amount of data you can store decreases at higher error correction levels.
Do I need Level H for logo QR codes?
Yes, Level H is strongly recommended for logo-embedded QR codes. When you place a logo on top of a QR code, you're covering data modules. Level H's 30% recovery capacity provides enough redundancy to compensate for the covered area. The QREndlessPro Customizer applies Level H automatically when you add a logo, so you don't need to think about it.
What is Reed-Solomon error correction in QR codes?
Reed-Solomon is a mathematical algorithm used for error detection and correction in digital data. In QR codes, it works by generating extra codewords (redundant data) from the original data using polynomial math over finite fields. When a scanner reads a damaged QR code, it uses these codewords to identify which modules are corrupted and reconstruct the original data. The same algorithm is used in CDs, DVDs, and satellite communication — anywhere data needs to survive transmission errors.
Can I change the error correction level of an existing QR code?
You cannot change the error correction level of a QR code without regenerating it. However, you can use the QREndlessPro Decoder to extract the data from your existing QR code, and then use the Generator to create a new QR code with the same data at a different error correction level. The Enhancer tool does this in one step — it decodes and re-encodes at the level you choose.



