QR code error correction: what it is and why it matters
QR code error correction is built-in redundancy that lets a QR code stay scannable even when part of it is damaged, dirty, or covered by a logo. There are four levels — L, M, Q, and H — each allowing more of the code to be lost while still working. Here's what you need to know.
What is error correction?
Every QR code contains more data than strictly necessary. The extra data is error correction information — essentially, backup copies of the encoded content arranged across the pattern.
If part of the QR code is unreadable (a scratch, a coffee stain, a logo in the center, a fold in the paper), the scanner uses the backup data to reconstruct the missing parts and still decode the message.
This is one of the reasons QR codes are so robust compared to older barcodes. A traditional barcode with a scratch across it is dead. A QR code with a scratch across it usually still works.
The four error correction levels
QR codes use the Reed-Solomon error correction algorithm, and it comes in four levels:
| Level | Name | Recovery capacity | What it means |
|---|---|---|---|
| L | Low | ~7% | Up to 7% of the code can be damaged and it still scans |
| M | Medium | ~15% | Up to 15% — the standard default for most QR generators |
| Q | Quartile | ~25% | Up to 25% — good when you expect some wear |
| H | High | ~30% | Up to 30% — best for logos or harsh environments |
The percentages refer to the maximum amount of the QR code's data modules (the individual dots) that can be unreadable. At Level H, nearly a third of the code can be destroyed and a scanner will still decode it correctly.
How it works (simplified)
Without going deep into mathematics, here's the basic idea:
- Your data (a URL, text, contact info) is encoded into a sequence of data modules (dots)
- The Reed-Solomon algorithm generates additional "parity" modules from that data
- Both the data modules and parity modules are arranged in the QR code pattern
- When a scanner reads the code, it checks the data against the parity modules
- If some modules are unreadable, the algorithm uses the parity data to reconstruct the missing pieces
Higher error correction levels generate more parity data, which means more dots in the QR code. This makes the code physically larger (more modules) but more resilient.
The trade-off: resilience vs. density
Here's the catch: higher error correction means a denser QR code.
More parity data = more modules = smaller individual dots at the same physical size = harder to scan at very small print sizes.
| Error correction | Relative code density | Impact |
|---|---|---|
| L (Low) | Smallest, simplest code | Easiest to scan at tiny sizes |
| M (Medium) | Moderate | Good balance for most uses |
| Q (Quartile) | Larger | Slightly bigger minimum print size |
| H (High) | Largest, most complex | Needs to be printed a bit larger |
In practical terms, the difference is small. A QR code at Level H encoding a short URL might need to be printed at 2.5 cm instead of 2 cm. It's not dramatic, but it matters at the margins — particularly on business cards and small product labels where space is tight.
For sizing details at every print format, see our QR code size guide.
When each level makes sense
Level L (Low, 7%) — maximum data, minimum size
Use when:
- You need the smallest possible QR code
- The code will be displayed on a clean, digital screen (no physical damage risk)
- You're encoding a lot of data and need to keep the code scannable at a given size
Real-world examples:
- QR codes on digital screens or presentations
- Codes displayed on clean, protected surfaces
- High-density data like long URLs where keeping module count low matters
Level M (Medium, 15%) — the all-rounder
Use when:
- You want a good balance between size and resilience
- The code will be printed on paper or card in normal conditions
- You're not adding a logo to the center
This is the default for most QR code generators, including oneclickqrcode.com.
Real-world examples:
- Business cards
- Flyers and brochures
- Product packaging (protected by shrink wrap or box)
- Restaurant menus (laminated)
Level Q (Quartile, 25%) — extra safety
Use when:
- The code will be in a somewhat harsh environment
- You expect moderate wear and tear
- You want extra confidence that the code will scan even after some damage
Real-world examples:
- Outdoor signage exposed to weather
- Warehouse or industrial labels
- Stickers on surfaces that get handled frequently
- Flyers posted on outdoor bulletin boards
Level H (High, 30%) — logos and extreme conditions
Use when:
- You're adding a logo or image to the center of the QR code
- The code will be in harsh conditions (outdoor, industrial, high traffic)
- Maximum resilience is more important than minimum size
Real-world examples:
- Any QR code with a center logo
- Outdoor banners and signs
- Codes on floors, vehicles, or surfaces that get dirty
- Codes printed on textured or non-ideal surfaces
Error correction and logos
This is where error correction becomes directly relevant to most people. When you add a logo to a QR code, you're covering part of the code with an opaque image. The scanner can't read the modules behind the logo.
A center logo typically covers about 15-20% of the code. At Level M (15% recovery), that's right at the limit — the code might work, might not, depending on exact logo positioning. At Level H (30% recovery), you have a comfortable margin.
This is why oneclickqrcode.com automatically switches to Level H when you upload a logo. You don't need to think about it — the tool handles it. When you remove the logo, it switches back to Level M.
The practical takeaway: if you're using a logo, print the QR code slightly larger than you would without one, because Level H adds more modules to the code. An extra 0.5 cm usually does it.
Error correction in practice
How much damage can a QR code actually survive?
In testing, QR codes at Level H can survive:
- A corner torn off
- Ink smudges or stains covering parts of the code
- Fading from sun exposure
- Creases and folds in the paper
- Partial obstruction (a sticker, a thumb, a coffee ring)
- A logo covering up to ~25% of the center
What they generally can't survive:
- Losing one or more of the three large position markers (the big squares in three corners)
- Damage to more than 30% of the modules (at Level H)
- Complete fading where no contrast remains
- Physical distortion (stretching the code from square to rectangle)
Real-world damage scenarios
Coffee ring on a table tent: A QR code on a restaurant table tent gets a coffee ring across one corner. At Level M or higher, it still scans — the error correction fills in the damaged section. At Level L, it might fail if the ring covers more than 7% of the modules.
Weathered outdoor poster: A poster on a utility pole fades in the sun over a few weeks. The contrast decreases, and some modules become hard to read. Higher error correction means the scanner has more redundancy to work with, improving the odds of a successful scan.
Scratched product label: A product label gets scratched during shipping. The barcode is destroyed (traditional barcodes have zero error correction for horizontal scratches). The QR code, with its two-dimensional error correction, likely still works.
Error correction and data capacity
There's a maximum amount of data a QR code can hold, and higher error correction reduces that capacity because more space is used for parity data.
| Error correction | Max alphanumeric characters | Max numeric digits |
|---|---|---|
| L | 4,296 | 7,089 |
| M | 3,391 | 5,596 |
| Q | 2,420 | 3,993 |
| H | 1,852 | 3,057 |
For typical QR code content — URLs, short text, contact cards — you're nowhere near these limits. A typical URL is 30-80 characters. Even at Level H, you have room for thousands of characters.
The capacity matters only for edge cases: very long text, embedded data, or specialized applications. For everyday use, pick the error correction level based on resilience needs, not capacity.
How oneclickqrcode.com handles error correction
The tool uses a smart default approach:
- No logo: Level M (Medium, 15% recovery) — the standard for most printed QR codes
- With logo: Level H (High, 30% recovery) — automatically applied when you upload a center image
You don't need to manually select an error correction level. The tool picks the right one based on whether you're using a logo. This keeps things simple while ensuring your QR code works reliably.
The error correction level is applied when the QR code is generated in your browser. It affects the internal structure of the code (how many modules are allocated to parity data) but not the visual style or colors you've chosen.
Tips for maximum reliability
Regardless of error correction level, these practices help ensure your QR code scans every time:
- High contrast — dark dots on a light background. The tool warns you when contrast drops below 3:1
- Adequate size — follow the size recommendations for your use case
- Quiet zone — leave blank space around the QR code (at least 3-4 mm)
- Matte finish — glossy surfaces create glare that interferes with scanning
- Test after printing — always scan a printed copy before a full print run
- Keep it square — never stretch or skew a QR code
- Clean surfaces — if the code is displayed on a reusable surface, keep it clean
FAQ
Does higher error correction make the QR code harder to scan?
No — it makes it slightly denser (more modules), which means each module is smaller at the same print size. As long as you print it large enough, scannability is the same or better because the scanner has more data to work with.
Can I choose the error correction level at oneclickqrcode.com?
The tool automatically uses Medium (M) by default and switches to High (H) when you add a logo. You don't need to choose manually — it's handled for you.
Does error correction affect the QR code's appearance?
Higher error correction levels produce more modules (dots), making the code appear denser. The visual style (colors, dot shape, corners) stays the same regardless of level.
Is Level H always the best choice?
Not necessarily. Level H produces the densest code, which can be harder to scan at very small sizes. If you're printing a tiny QR code on a product label with no logo, Level M gives you a cleaner, simpler code that's easier for cameras to resolve. Level H is best when you need a logo or expect physical damage.
Do all QR code scanners support error correction?
Yes. Error correction is part of the QR code standard (ISO/IEC 18004). Every compliant scanner — including the built-in camera apps on iPhone and Android — handles it automatically. There's nothing special the user needs to do.
Create a reliable QR code at oneclickqrcode.com — error correction is handled automatically. Add a logo and it switches to High for maximum resilience. Free, no sign-up needed.
Founder of oneclickqrcode.com