A damaged QR code can often still be scanned, because every QR code carries built-in error correction that mathematically reconstructs missing data. If a code truly won't scan, you fix it by improving the scan conditions — angle, distance, lighting — or by regenerating the code from its original content. You can't "repair" the printed pattern itself.
Why does a damaged QR code still scan?
A damaged QR code still scans because QR codes are designed with redundancy: the data is encoded using Reed-Solomon error correction, which spreads recovery information across the entire symbol. When part of the pattern is scratched, stained, torn, or covered, the scanner uses that redundant data to mathematically rebuild the missing pieces. Depending on the error correction level chosen at creation time, a QR code can lose roughly 7% to 30% of its surface and still decode perfectly. This is why a code with a coffee stain, a fold line, or even a logo stamped over its middle often works fine — the scanner isn't reading every module, it's solving for the original message from whatever survives.
The QR standard defines four error correction levels, and every code is created at exactly one:
- Level L (Low) — recovers roughly 7% damage. Smallest, least dense pattern.
- Level M (Medium) — recovers roughly 15%. The common default.
- Level Q (Quartile) — recovers roughly 25%.
- Level H (High) — recovers roughly 30%. The most resilient, and the standard choice for codes with logos.
The trade-off is density: higher error correction means more redundant data, so at the same physical size the code becomes a finer, busier grid — which itself demands better print quality and a steadier scan. Robustness is a balance you choose per code, not a free upgrade.

How do you scan a broken or damaged QR code?
To scan a broken QR code, work with the error correction instead of against it: give the scanner the cleanest possible view of what remains. Flatten any creases, move to even lighting without glare, hold the phone parallel to the code, and slowly adjust your distance so the code fills most of the frame. If your default camera fails, try a dedicated scanner app — decoding engines differ, and a stronger one will often read a code your camera app gives up on. You can also photograph the code and scan the image later, which lets you retake the shot until the damaged areas are as legible as possible. Most "broken" codes are actually scannable codes being scanned in bad conditions.
Run through this checklist in order:
- Fix the geometry. Smooth out folds and wrinkles — a crease both bends the grid and casts a shadow across it.
- Fix the light. Glare from lamination blinds the camera; tilt the code until the reflection moves off the pattern. In dim conditions, use the flashlight.
- Fix the angle and distance. Hold the phone square to the code and move closer until it fills the frame, backing off slightly if the camera won't focus.
- Try a better decoder. QRBot reads damaged and partially obscured codes by leaning fully on the standard's error correction, works offline, and shows the decoded content before opening anything — so a mangled code can't silently send you somewhere unexpected. It's free on iOS and Android: download QRBot.
- Scan from a photo. If the code is behind glass or in an awkward spot, photograph it and decode the image — retaking the shot until it's sharp.
New to scanning? Our guide on how to use a QR code scanner covers the basics.
When is a QR code truly unfixable?
A QR code is truly unfixable when the damage exceeds what error correction can reconstruct, or when it destroys the structures the scanner needs before decoding even begins. The three large squares in the corners — the finder patterns — tell the scanner where the code is and how it's oriented; if one is torn away or heavily obscured, most scanners can't lock onto the code at all, however intact the rest is. The same goes for the quiet zone, the empty margin around the code: if text, borders, or artwork crowd right up against the pattern, the scanner can't find the code's edges. And if total damage exceeds the error correction budget — more than about 30% even at Level H — the math simply has no solution.
Signs you've hit a dead end:
- A corner finder pattern is gone — torn off, painted over, or faded. Without it, orientation fails.
- The quiet zone is violated. This one is sometimes recoverable: cover the intruding sticker, frame, or text with plain white paper and scan again.
- The contrast has collapsed — sun-bleached ink, dark-on-dark printing, or heavy grime.
- The loss is too large for the level. A Level L code (7% budget) fails after damage a Level H code would shrug off — and you can't tell the level by looking.
When a code is genuinely dead, no scanning trick will resurrect it. The fix moves to regeneration.
How do you actually fix a broken QR code?
You fix a broken QR code by regenerating it, not by patching the print — real QR code repair happens at the data level, not on paper. A QR code is just an encoding of some content: a URL, Wi-Fi credentials, contact details. If you have that original content, create a brand-new code that encodes exactly the same thing, print it, and replace the damaged one. The new code doesn't need to look identical (different generators produce different-looking but equally valid patterns); it only needs to carry the same data. If you don't have the content written down, scan the damaged code once with the strongest decoder you can to recover it, then regenerate. Drawing missing modules back in with a pen is not realistic — module placement is mathematically precise.
This is also what people usually mean by "refresh a QR code" — and it's worth being precise, because there are two situations:
- Static QR codes never expire. A static code encodes its content directly in the pattern; as long as the destination still exists, the code works in ten years exactly as today. "Refreshing" one just means printing a fresh, undamaged copy.
- Dynamic QR codes can expire. A dynamic code points to a short redirect link controlled by a QR service. If the service shuts down, deletes the link, or the plan ends, the code dies even though the print is perfect. If a pristine code suddenly stopped working, an expired redirect is the likely culprit — the fix is a new code pointing directly at the real destination.
QRBot generates static codes — the content lives in the code itself, with no middleman link that can be turned off, so the codes you create never expire. When you regenerate, take the opportunity to raise the error correction level so the replacement outlives its predecessor — create a replacement code with QRBot, free on iOS and Android.
What are QR code versions, and why do they affect scannability?
QR code versions describe the size of the module grid, from Version 1 (21×21 modules) up to Version 40 (177×177 modules). Each step up adds four modules per side — so QR code version 6 is a 41×41 grid — and more modules means more data capacity. The generator picks the version automatically from how much content you encode and which error correction level you choose: a short URL at Level L might fit in Version 2, while the same URL at Level H, or a long URL with tracking parameters, might need Version 6 or beyond. Version isn't a quality rating — just how fine-grained the pattern is.
Scannability comes into play because at a fixed printed size, a higher version means smaller modules. A Version 6 code printed 2 cm across squeezes 41 modules into that width — each under half a millimeter — leaving little tolerance for ink spread, low print resolution, or camera blur. That's why long URLs plus maximum error correction can backfire on small labels: the version climbs, the modules shrink, and the code gets harder to scan. Two rules follow: keep the encoded content short so the version stays low, and print larger whenever the code will be scanned from a distance.
Which error correction level should you choose when creating a QR code?
Choose the error correction level based on where the code will live and what will cover it. For clean digital display — a code shown on a website or screen — Level L or M is plenty, keeping the pattern sparse and easy to scan. For everyday print like flyers, menus, and packaging that will be handled or smudged, Level M or Q is the sensible floor. For outdoor signage, stickers, and anything exposed to weather or heavy traffic, go to Q or H. And if you're placing a logo over the center of the code, Level H is effectively mandatory: the logo is damage from the scanner's point of view, consuming error correction budget before the real world takes its share.
A quick reference:
| Use case | Recommended level |
|---|---|
| On-screen display, digital documents | L or M |
| Flyers, brochures, menus, packaging | M or Q |
| Outdoor signs, stickers, transit, industrial | Q or H |
| Any code with a logo or artwork overlay | H |
Higher levels densify the code, so pair Q or H with a generous print size and a comfortable quiet zone. QRBot lets you pick the robustness when generating, so a logo can safely cover part of the code while everything still scans — see our guide to creating a QR code with a logo, and our comparison of the best QR code scanner apps to test your design against. Before any print run, do a five-minute stress test: print one copy at final size and scan it from a realistic distance, at an angle, and in poor light.
Frequently asked questions
Can a damaged QR code be repaired?
Not physically — you can't redraw missing modules, because their placement is mathematically exact. But repair is often unnecessary: error correction lets a code with up to 30% damage (at Level H) scan as if it were perfect. Beyond that budget, or with a destroyed finder pattern, the only real fix is to recover the original content, generate a new code encoding the same thing, and replace the print.
Why is my QR code not scanning?
The most common causes: glare or poor lighting, a bad angle or distance, creases distorting the pattern, a violated quiet zone, damage beyond the error correction budget, or — for pristine codes that suddenly stopped working — an expired dynamic redirect link. Work through the conditions first: flatten, relight, square up, move closer. If it still fails, try a scanner app with stronger decoding, or scan from a photo.
Do QR codes expire?
Static QR codes never expire — the content is encoded directly in the pattern, so the code works as long as its destination exists. Dynamic QR codes can expire, because they route through a short link owned by a QR service; if the service deletes the link or the subscription lapses, the code stops working even though the print is flawless. QRBot creates static codes only, so nothing you print can be switched off later.
What error correction level should I use?
Use Level M as a default for print, Level Q for handled or semi-exposed materials, and Level H for outdoor use or any code with a logo over it. Reserve Level L for clean on-screen display. When in doubt, go one level higher — but keep the content short and the print size generous, since denser patterns are harder to scan small.
Whether you're rescuing a battered code or replacing one past saving, QRBot covers both ends: it scans damaged codes, shows you what's inside before opening it, and generates durable static codes at the robustness you choose — free, offline, on iOS and Android. Get QRBot here.



