QR code scanner
Read a QR code from a photo, a screenshot, a dropped file, a pasted image or your camera — and see what it actually contains rather than only the text. The payload, the version, the error-correction level, the mask, the encoding modes, and how many codewords error correction had to repair to read it.
That last figure is the one no other scanner shows, and it is the useful one. A code that reads after repairing eleven codewords is a code that nearly failed: the print is worn, the light was poor, or the image was compressed. Knowing it read is not the same as knowing it read comfortably, and the difference is what tells you whether a batch of printed labels is about to become a problem.
Nothing is uploaded, and on this page that is the point rather than a slogan. A QR code frequently carries a Wi-Fi password, a contact card, or a payment address. Every other scanner site posts your image to a server to decode it; this one decodes in the browser tab, which is possible because the decoder was written here rather than called over an API.
How it works: the three finder patterns are located by their 1:1:3:1:1 run-length signature and verified in both directions, the corners are identified from the geometry, the bottom-right alignment pattern is found to give a fourth reference point, and the module grid is sampled through the resulting projective transform. The fourth point is what makes a code photographed at an angle readable rather than only one scanned flat.
Measured against generated images with known content, it reads codes rotated up to about 20 degrees and at quarter and half turns, keystoned by up to about 10 percent, blurred by up to a quarter of a module, faded to 5 percent contrast, and downscaled to roughly two pixels per module. Two limitations are worth stating plainly: a code rotated near 45 degrees usually will not be found, because the finder search runs along horizontal scanlines, and a mirrored code is not read at all. Both are gaps rather than bugs, and a scanner that says so beats one that spins forever.