← Back to articles

QR Code Error Correction: How Logos and Damage Don't Break the Scan

May 30, 2026

What QR code error correction is, in one paragraph

QR code error correction is the math baked into every QR symbol that recovers your data when part of the code is smudged, scratched, or covered by a logo. It works because the encoder doesn't just write your URL into the grid. It also adds redundant "check" bytes generated by a Reed-Solomon code — the same family of math used on audio CDs, DVDs, and deep-space probes. Pick from four levels: L recovers roughly 7% of damaged codewords, M about 15%, Q about 25%, and H about 30%. Most generators default to M, which handles everyday wear without ballooning the symbol.

How it actually works

Reed-Solomon, in plain English

Think of it as showing your work. The encoder takes your message, then appends extra bytes computed from it. A scanner uses those extra bytes to detect which parts of the message are wrong and rebuild them. Here's the concrete textbook example: a Version 1 QR symbol at level L is a (26,19,2) code — 19 message bytes, 7 check bytes, and the decoder can repair up to 2 byte errors before the symbol becomes unreadable.

Why is this good for printed codes? Reed-Solomon excels at burst errors — clusters of consecutive damaged bytes. That's exactly how QR codes fail in the wild: a coffee splash on a menu, a thumb smudge, a sticker peeling off a parking sign. The damage isn't one random bit at a time. It's a blob.

The four levels, side by side

The level isn't a vibe. It's a specific share of total codewords the decoder can recover: L is about 7%, M about 15%, Q about 25%, H about 30%. The chosen level is encoded into the symbol's format information so any scanner knows what to expect. A rough mapping: L for clean screens and dense payloads, M for printed flyers and everyday use, Q for outdoor signage and packaging, H for harsh environments or codes with a logo in the middle.

Block interleaving — why a smudge spreads its damage

For anything beyond the smallest symbols, QR splits the message into several Reed-Solomon code blocks and interleaves them across the grid. The point: a localized smudge no longer wipes out one block — its errors spread across several blocks, each of which can still recover within its own budget. All of this is standardized in ISO/IEC 18004, alongside the rest of the QR code anatomy — finder patterns, modules, masks.

Where you'll see it

Logos and brand colors in the middle

The reason brands can drop a logo in the center of a QR code is that the decoder has no idea it's a logo. It sees damaged codewords and reconstructs them from the surrounding data. As long as the covered area stays inside the level's correction budget, the code still scans. The practical rule: codes with a center logo are usually encoded at Q or H so the brand mark can cover roughly 15–30% of the symbol without breaking scans.

Real-world damage tolerance

Scratched packaging, peeling stickers, sun-faded outdoor signs, menus with grease spots, parking placards left in the rain — those are the codes that benefit most from a higher level. An M-level code that survives a screen or a clean flyer can fail outdoors. If the QR is going somewhere it can get dirty or partly covered, encode it at Q or H from the start.

Other symbologies, other approaches

Traditional 1D barcodes like EAN-13 have no built-in error correction. If the line pattern is broken, the scan fails. That's part of why QR codes have replaced them in so many consumer settings. The full picture lives in our QR codes vs. traditional barcodes explainer.

Tips, gotchas, and how to do this in QRDock

Picking the right level

Short decision rule: M for screens and clean prints, Q for outdoor or packaging, H for codes with a logo in the middle or anywhere rough. Mind the trade-off — every step up adds redundancy bytes, so the encoder needs more modules for the same payload. The same URL at H can push the symbol up several versions, which means more dots per side and a larger printed footprint.

What error correction can't fix

Reed-Solomon can rebuild damaged codewords up to the level's budget per block. It can't rebuild the three finder patterns in the corners, the timing lines, or the quiet zone of white space around the symbol. If a corner is missing, most scanners won't even try. The one hard rule: protect the corners and the margin.

Generating one in QRDock

QRDock is a free QR scanner and creator that lets you pick L, M, Q, or H per code and preview damage tolerance before you print. No account, no tracking, no ads.

Frequently Asked Questions

What does error correction level mean on a QR code?

It's a setting — L, M, Q, or H — that tells the encoder how many extra Reed-Solomon bytes to add. The higher the level, the more of the symbol can be smudged, scratched, or covered before it stops scanning. L recovers about 7% of damaged codewords, M about 15%, Q about 25%, and H about 30%.

Will a logo in the middle break my QR code?

Not if you stay inside the error correction budget. The decoder treats the logo as damaged codewords and reconstructs the message from the surrounding data. A common rule: use Q or H if your logo covers more than roughly 15% of the symbol.

Which error correction level should I pick?

M is the default for most generators and works for screens, menus, and printed flyers. Choose Q or H when the QR will live somewhere it can get dirty, scratched, or partly covered — outdoor signage, factory labels, packaging, or codes with a logo. Pick L only when you need to cram more data into a smaller symbol and the print conditions are clean.

Does higher error correction make the QR code bigger?

Yes. Higher levels add more redundancy bytes, so the encoder needs more modules to fit the same payload. The same URL at H can push the symbol up several versions, which means more dots per side and a larger printed footprint.

Can error correction fix a QR code that's been completely cut in half?

No. Reed-Solomon can rebuild damaged codewords up to its budget per block, but it can't reconstruct the three finder patterns in the corners. If a corner finder pattern or a timing line is missing, most scanners won't even attempt to read the code.