QR code reader
Read what a QR code actually contains without pointing a phone at it. Drop in a photograph or a screenshot and you get the contents as text, along with what kind of code it is.
The decoding happens in your browser. The image is never uploaded, which matters here more than it does for most tools: people check codes precisely because they do not trust them.
Drop an image here, or choose one. It never leaves your device.
Why read a code instead of scanning it
Scanning acts on the contents. A phone camera pointed at a code will offer to open the link, join the network or start the payment, and on some setups it does more of that automatically than you would like. Reading shows you the payload as text and does nothing with it.
That is useful whenever the code came from somewhere you cannot vouch for: a sticker on a parking meter, a flyer through the door, an unexpected letter, a code in an email. Quishing — phishing through QR codes — works precisely because a printed square reveals nothing about where it goes.
What gets flagged
The contents are shown as plain text and never as a clickable link, because turning an untrusted payload into something clickable would make the reader itself the delivery mechanism for whatever was being checked.
A few types get a warning: a WiFi code, because the password is in there in plain text and anyone who sees the code can read it; an http:// address, because anything sent to it travels unencrypted; and a crypto payment request, because those cannot be reversed and the address deserves checking against a source you trust.
Getting a photograph that decodes
Include the whole code and the light margin around it. The margin is part of the symbol — decoders use it to find the edges — so a tightly cropped photograph often fails when the same code scans fine in person.
Shoot square to the code rather than at an angle, get close enough that it fills a good part of the frame, and avoid glare across the middle. A screenshot is usually easier than a photograph, and both work here.
When a code will not read at all
Damage to a corner is the usual reason. The three large corner squares are how a decoder finds and orients the symbol, and unlike the data area they are not protected by error correction — a worn or obscured corner means no decode at all, rather than a partial one.
Very low contrast, heavy reflections and light-on-dark printing are the other common causes. This reader tries the image both normally and inverted, which handles most light-on-dark codes, but a code printed in two similar tones may not be recoverable from a photograph at all.
Common questions
- Is the image uploaded anywhere?
- No. The file is drawn to a canvas and decoded in your browser, so it never leaves your device. That matters here because people check codes they do not trust, and a reader that shipped those images to a server would be asking for the wrong kind of trust.
- Why not just scan the code with my phone?
- Scanning acts on the contents — a camera will offer to open the link or join the network, sometimes with less confirmation than you would like. Reading shows the payload as text and does nothing with it, which is the point when the code came from somewhere you cannot vouch for.
- Why does my photograph fail to decode?
- Most often the margin is cropped out. The light border around a code is part of the symbol and decoders use it to find the edges. Include the whole code plus its margin, shoot square rather than at an angle, and avoid glare.
- Can it read a damaged QR code?
- Sometimes. Error correction recovers scattered damage in the data area, but the three corner squares are not protected — if one is worn or covered, the decoder cannot locate the symbol and no amount of redundancy helps.
- Does it work with light-on-dark codes?
- Usually. The image is tried both normally and inverted, which handles most inverted printing. Codes in two similar tones may still be unrecoverable from a photograph, because the contrast a decoder needs is simply not there.
More tools
- Embed a QR generatorAdd a working QR code generator to your website with one line of HTML. Free, no account, no tracking of your visitors.
- QuishingPhishing through QR codes: why a printed square hides its destination, how swapped stickers work, and how to check a code before acting on it.
- Quiet zoneThe blank margin around a QR code, four modules wide. What it does, why cropping it breaks scanning, and how wide it needs to be.
- URL QR code generatorTurn any web address into a QR code you can print. Free, no account, no watermark, and no expiry on the code you download.