Barcode Reader
Decode a 1D or 2D barcode from any image with ZXing.
Quick answer: Barcode Reader: decode a 1D or 2D barcode from any image with ZXing. Runs entirely in your browser, free, no signup.
Last updated
Good to know
This reader decodes a barcode from a still image using ZXing ("zebra crossing"), the same open-source engine behind many mobile scanning apps. It recognizes the common one-dimensional retail and logistics symbologies — EAN-8/13, UPC-A/E, Code 128, Code 39, Codabar and ITF — plus two-dimensional codes like QR and Data Matrix. Everything happens in your browser, so the photo of a packing slip or product label never leaves your device.
Decode success depends heavily on image quality. The engine needs sharp, high-contrast bars with a little white quiet zone on either side; that margin is part of the spec, and cropping too tightly is a common reason a scan fails. Even lighting matters more than resolution — glare across the bars, motion blur, or a steep camera angle that skews the pattern will all defeat detection where a plain, flat, well-lit shot succeeds.
If a barcode refuses to read, try rotating the image so the bars run roughly horizontal, increasing brightness, or re-photographing against a matte background to kill reflections. Note that a decoded EAN or UPC number is just the identifier printed on the pack — it is not a price or product database lookup. To create codes rather than read them, use the barcode generator; for scanning QR codes specifically, the QR reader is tuned for that format.
Frequently asked questions
- Is the barcode reader free?
- Yes — free, no signup.
- Are my images uploaded?
- No — decoding happens locally with ZXing.
- Which formats does it recognize?
- EAN-8/13, UPC-A/E, Code 128, Code 39, Codabar, ITF, RSS-14 plus 2D formats like QR and Data Matrix.
- What if it can't read my barcode?
- Make sure the barcode is well-lit, sharp and roughly horizontal. Heavily skewed photos may not decode.
- Can it scan from a camera?
- Not in this version — drop a saved photo or screenshot instead.