QR Code Recovery Tool
A QR code that will not scan after a scratch, a fold or a blurry photo often still holds its data. Upload the image and the tool cleans it up so the code's own Reed-Solomon error correction can read what survives, all in your browser.
By The eancheck teamPublished Updated
Drop a QR code image here, paste from clipboard, or click to browse
Accepts PNG, JPG, WEBP, SVG, BMP
How QR code error correction works
Every QR code contains more data than its payload strictly requires. The extra bytes are Reed-Solomon parity codewords, and they exist for one reason: to let the decoder reconstruct missing or corrupted data without asking the encoder to retransmit. The ISO/IEC 18004 standard defines four error correction levels, each trading capacity for resilience.
The four EC levels
- L (Low): recovers up to 7% of codewords. Best for controlled environments where the code will be printed cleanly and scanned quickly: event tickets, boarding passes, digital screens.
- M (Medium): recovers up to 15% of codewords. A middle setting for product packaging, marketing materials, and general-purpose labels.
- Q (Quartile): recovers up to 25% of codewords. Used when the code is expected to take moderate abuse: warehouse shipping labels, outdoor signage, codes printed on rough surfaces.
- H (High): recovers up to 30% of codewords. Use it when a logo or image is placed over the centre of the code, or when the code will be exposed to harsh physical conditions. The trade-off is a noticeably denser symbol.
Reed-Solomon under the hood
The encoder treats the data payload as a polynomial over GF(256), a finite field with 256 elements that maps neatly onto single bytes. It divides the data polynomial by a generator polynomial and appends the remainder as parity codewords. When the decoder reads the symbol, it evaluates the received polynomial at specific points. If all evaluations come to zero, the data is clean. If not, the non-zero values (called "syndromes") pinpoint both the positions and the magnitudes of the errors. For 2t parity codewords, the decoder can correct up to t corrupted codewords. At level H, a version-5 QR code (37 by 37 modules) carries 46 data codewords and 88 EC codewords in four blocks. Each block has 22 EC codewords and can fix up to 11 corrupted bytes.
Common causes of QR code damage
What damaged the code decides whether recovery is likely and which manual adjustment to try. This tool reads QR codes only. For a scuffed EAN or UPC with digits missing, the barcode repair tool works out the missing digits from the check digit.
Physical wear
Scratches, scuffs, and abrasion from handling, transport, or weather. Warehouse labels that ride a conveyor belt for months lose surface detail gradually. The damage is usually localised, so the error correction can often absorb it. For labels that face this kind of wear, Data Matrix uses the same kind of error correction; you can make one with the Data Matrix generator.
Printing defects
Inkjet bleed, thermal printer fade, toner smudge, or low-DPI output that merges adjacent modules. These defects tend to affect the entire code uniformly, which is harder to recover from than localised damage because every codeword takes a small hit rather than a few codewords taking a large one.
Partial obstruction
A sticker placed over part of the code, a finger in the photo, a fold in the paper, or a receipt that curled and hid one corner. If the obstruction covers less than the code's EC capacity, recovery is straightforward. If it covers a finder pattern, the decoder may fail to locate the code at all, in which case rotation and cropping can help.
Low-resolution capture
Screenshots from video calls, photos taken from across a room, images downscaled by messaging apps. The modules blur together and the decoder cannot tell black from white. The tool's sharpening and contrast enhancement filters target exactly this problem.
Compression artefacts
JPEG compression rounds off the crisp edges that QR codes depend on. Each save-and-share cycle degrades the image further. Screenshots saved as PNG are lossless and decode more reliably; if you have the option, always prefer PNG over JPEG for QR code images.
Tips for better QR code scanning
How you photograph the code often decides whether it scans at all. Try these before you upload a photo here.
Lighting
Even, diffused light produces the best contrast between dark and light modules. Avoid direct flash, which can create glare spots that the decoder reads as white. If you are scanning from a screen, turn the screen brightness up and reduce ambient light to minimise reflections.
Angle and distance
Point the camera straight at the code, as close to perpendicular as you can manage. Steep angles stretch the modules into parallelograms that confuse the decoder's grid alignment. Get close enough that the code fills at least a third of the frame, but leave a margin of quiet zone (the white border) on all sides.
Resolution
Each module in the QR code needs to span at least 3 to 4 pixels in the captured image for reliable decoding. A version-5 code is 37×37 modules, so the code region should be at least 150×150 pixels. Higher is better. If you are cropping a screenshot, do not scale it down below that size.
Focus
Tap to focus on the QR code before capturing. A phone camera may focus on a face or the centre of the frame instead of the code. A crisp image at moderate resolution will decode more reliably than a high-resolution but blurry one.
Frequently asked questions
How much damage can a QR code survive?
It depends on the error correction level chosen when the code was made: about 7% of codewords at level L, up to about 30% at level H. Where the damage sits matters too. A scratch across one of the three large corner squares, the finder patterns, can stop a decoder before error correction starts. When the tool decodes a code, it shows the level, so you can see how much margin that code had.
What do the error correction levels (L, M, Q, H) mean?
The four levels control how much redundant data the encoder adds. L (Low) devotes about 7% of capacity to error correction. M (Medium) devotes 15%. Q (Quartile) devotes 25%. H (High) devotes 30%. Higher levels make the code more resilient to damage but also increase the number of modules, so the symbol gets physically larger or denser for the same payload.
What types of damage can this tool fix?
Blurry or out-of-focus photos, scratches and scuffs, tears and folds, faded print, low contrast, JPEG artefacts from repeated screenshots, and stickers or fingers covering part of the code. The tool tries 13 image enhancement variants and then uses the Reed-Solomon redundancy already inside the code to rebuild the data. It cannot bring back more than the code's error correction level allows.
Is my image sent to a server?
No. The image is enhanced on a canvas and decoded with WebAssembly on your own device, so a photo of a shipping label or a document with personal details is never uploaded. The tool does not save the image in browser storage either, so closing the tab discards it. An image pasted with Ctrl+V stays on the device in the same way.
What QR code versions are supported?
The tool supports QR code versions 1 through 40, which covers every standard symbol size from 21×21 modules up to 177×177. Micro QR codes are not supported. Each version adds 4 modules per side, so a long URL or a block of text gives a higher version with smaller modules, and that needs a sharper photo to recover.
What if recovery fails?
If the automatic pipeline cannot decode the image, try the manual controls: adjust brightness and contrast, experiment with different binarisation thresholds, or rotate the image in small increments. If the code is physically missing more data than its error correction level allows, no software can recover it. At that point, you need a better source image or an alternative copy of the code.
Can I recover a QR code from a screenshot?
Yes. The main problem with screenshots is compression artefacts: JPEG screenshots lose edge sharpness, and each save-and-share cycle adds to the damage. The tool's enhancement pipeline targets these artefacts with sharpening and contrast adjustments. Paste it straight from the clipboard with Ctrl+V (Cmd+V on a Mac) to skip saving a file first.
Why will my phone not scan a QR code that looks undamaged?
Upload a photo of it here to find out. If the first badge under Recovery insights says Direct, the image read without any clean-up, so the fault is on the phone's side: QR scanning switched off in the camera settings, a smudged lens, glare from a glossy label, or the phone held so close that the white border is cut off. If the tool needed a cleaned-up copy or Reed-Solomon, the code itself is worn and a new print will scan more easily.
Is it safe to open the link in a recovered QR code?
Read it before you open it. The tool shows the decoded text and opens nothing on its own; a link opens only when you click it. Check the whole domain, not only the start, because a sticker over a real code on a parking meter or a poster can point to a lookalike site. An address with /01/ and 14 digits is a GS1 Digital Link from a product pack, and the GS1-128 parser shows its product number, batch and dates without opening it.
Can I make a new copy of a damaged QR code?
Yes, once the tool has read it. Copy the text under Decoded data and paste it into a QR code generator, and for a label that gets handled pick level Q or H, so the new code can lose more before it fails. If the text is a GS1 Digital Link from a product pack, the Digital Link generator makes the new code. Download image saves the cleaned-up picture, not a fresh code, so it does not replace a reprint.
How does Reed-Solomon error correction work?
Reed-Solomon codes treat the QR payload as a polynomial over a Galois field (GF(256) for QR codes). The encoder appends extra "parity" codewords computed from the data polynomial. When a decoder encounters errors, it uses those parity codewords to build a system of equations, locate which codewords are corrupted, and compute their correct values. The maths guarantees that 2t parity codewords can correct up to t errors, which is why higher EC levels need more space but survive more damage.
By The eancheck teamPublished Updated
Questions or corrections? Email the eancheck team.