ToolsTray

Star a tool to keep it here.

Barcode Generator & Reader

Barcode generator and reader for Code 128, EAN-13, UPC-A, EAN-8, Code 39, ITF-14 and Codabar. Check digits are worked out for you. Download SVG or PNG, batch a list of 200, or read a code off a photo.

At print size

Mode

Any text or number — the most versatile format.

1px to 4px in half steps; GS1 sizes only EAN/UPC and ITF-14, so Code 128 carries no band.

How to use

  1. Pick a mode at the top: One barcode for a single label, Many barcodes for a list, Scan to read an existing code.
  2. Choose the Barcode type. The hint under the select spells out what that symbology accepts.
  3. Type your Value. Code 39 is uppercased for you, and Code 128 refuses anything outside ASCII. Tick Add the mod 43 check character on Code 39 only when the scanner at the other end expects one.
  4. Set Bar width and Height (px) for the label you're printing. On EAN, UPC and ITF-14 the green stretch under the slider is the legal band, and the cards under the symbol grade the module width, magnification and bar height against GS1's tables. Height starts at 140px, the first step on the field that clears GS1's EAN-13 minimum at a 2px bar. Untick Show value below to hide the digits.
  5. Download SVG when it's going to a printer, PNG when it's going on a screen.
  6. For a list, switch to Many barcodes and paste up to 200 lines. The first eight render live and unencodable values are marked before you build barcodes.zip.
  7. To read a code, open Scan and drop an image in, paste one, or tap Take photo on a phone. Your image takes the symbol's place, the value and its format are written under it, and Copy value puts the value on the clipboard.

About this tool

Two directions sit behind the mode switch at the top of this barcode generator. One barcode turns a value into a printable 1D symbol, and Scan runs the other way, pulling the number back out of a photo or a screenshot. Seven symbologies are on the type list. Code 128 takes any ASCII text, EAN-13 and UPC-A are the retail pair, EAN-8 fits packaging too small for a full EAN, Code 39 shows up on ID badges and warehouse labels, ITF-14 goes on outer cartons, and Codabar is still standard in libraries and blood banks. Choosing a type drops a sample value in, putting the shape on screen before you type your own.

The retail formats do their own arithmetic. Enter the 12 data digits of an EAN-13 and the 13th is worked out and appended; enter all 13 and the same sum runs as a check, naming the digit it expected when yours is wrong. The symbol is drawn at the size it prints. A CSS pixel is 1/96 inch, so a bar width of 2px is a 0.529 mm module, and for EAN, UPC and ITF-14 the slider marks the band GS1 allows: 1 to 2px for shop codes, 2 to 3.5px for cartons. The white either side is each symbology's own quiet zone, counted in modules, so it widens with the bars. Both downloads come from the same black-on-white SVG: barcode.svg for the printer, barcode.png for a slide.

Sixty bin labels, and one line that refused

Warehouse bins want Code 128: paste the sixty bin IDs into Many barcodes, watch the first eight render as a preview, and one line lights up as unencodable, a BIN‑A07 that picked up an accented character somewhere in the spreadsheet. Fix that line, build barcodes.zip, and print the sheet at bar width 2, height 100.

For the one retail-style label in the pile, switch to One barcode, pick EAN-13, and type the twelve digits 890123456789. The symbol renders as 8901234567890, because the weighted sum of those twelve comes to 130 and the digit that rounds it to a clean multiple of ten is 0. Type all thirteen back in later and the same arithmetic runs as a check.

Before you rely on it

  • Drawing the bars is not the same as owning the number. A code that scans at a checkout needs a GTIN licensed from GS1, and no generator can issue one of those.
  • A bulk run applies one symbology and one bar size to every line, so a sheet mixing EAN-13 with Code 128 takes two passes and two ZIPs.
  • Scanning works on still images. There's no live viewfinder, so on a phone you photograph the code and the picture gets decoded.
  • The millimetres hold for the file and for paper printed at 100%. A screen scales CSS pixels however it likes, so measure a printout before you sign off a label rather than holding a ruler to the monitor.
  • ITF-14 gets the bearer bars a label needs, top and bottom at twice the narrow bar. Corrugated board printed with plates wants a full 4.83 mm frame around the symbol instead, and that frame is not drawn here.
  • A Code 39 mod 43 character only helps when the scanner is set to check it. A reader that isn't will hand it back as one more character on the end of the value.

Frequently asked questions

Do I have to work out the check digit myself?

Not for the numeric formats. EAN-13 wants 12 data digits, UPC-A 11, EAN-8 7 and ITF-14 13, and the final digit is calculated from the standard alternating 1 and 3 weighting. If you paste a complete code instead, that same calculation is used to verify it, and a mismatch is reported with the digit that should have been there.

Can I put one of these on a product and sell it in a shop?

Only when the number is already yours. Retail scanners look up a globally unique GTIN, and GTINs are licensed from GS1 rather than made up. Bring a number you own and this will render it faithfully; it has no way to reserve one for you.

Will it read a barcode out of a photo I already took?

Yes, that is what Scan mode does. The decoder starts on the whole image and then tries harder: a small picture gets upscaled, a large one is split into overlapping tiles and searched section by section, and a noise-cleaning pass runs last. That sequence usually rescues a slightly soft shelf photo. Alongside the seven types it generates, it recognises Code 93, UPC-E, DataBar, QR, Micro QR, Data Matrix, Aztec and PDF417.

Can I generate barcodes for a whole spreadsheet column?

Paste the column into Many barcodes, one value per line, up to 200 of them. Every line becomes an SVG inside barcodes.zip. Lines the chosen type cannot encode, like an EAN-13 of the wrong length, are flagged in the preview and then counted in the status text rather than quietly dropped.

Missing something in Barcode Generator & Reader? Suggest a feature →

Tell someone who needs this.