Barcode Generator
EAN, UPC, Code128 and Code39
Generate print-ready linear barcodes with real checksum validation, quiet zones and SVG output.
Barcode Generator
Runs in your browser · nothing uploaded01 — How to use Barcode Generator
02 — Getting good results
03 — Questions
No. Encoding is a table lookup and a checksum calculation, both done in this browser tab. Nothing is transmitted or stored.
For EAN and UPC, digits are weighted alternately by three and one from the right, summed, and the check digit is whatever brings the total to a multiple of ten. Code 128 uses a position-weighted sum modulo 103, which is included in the bar pattern rather than printed.
Because each one implemented here uses its real encoding tables and checksum rules, verified against published check values. Adding symbologies that merely look right would produce barcodes that fail at the till, which is worse than not offering them.
Technically yes — the output is standards-compliant and the quiet zones and module widths are correct. Commercially, a retail barcode number must be allocated to you by GS1; encoding an arbitrary number produces a valid barcode carrying an identifier that is not yours.
04 — More about Barcode Generator
Why check digits exist
A check digit is a small amount of redundancy that catches the mistakes humans and scanners actually make. The EAN scheme — alternating weights of one and three — is chosen deliberately: it detects every single-digit error, and it detects most transpositions of adjacent digits, which is the classic typing mistake. It is not a security feature and cannot detect every possible error; two compensating mistakes can still produce a valid-looking number. What it does do is make it very unlikely that a mis-scanned or mistyped code silently resolves to a different real product, which is exactly the failure mode a retail system cannot tolerate.
How a linear barcode is read
A scanner does not see digits; it sees a one-dimensional signal of light and dark as its beam or sensor crosses the symbol, and it measures the relative widths of the bars and spaces. That is why the printed module width matters so much and why stretching one axis destroys a code: the decoder is comparing widths against each other, and distorting them breaks the comparison. It is also why EAN encodes the left half of the code with two different digit tables selected by parity — the parity pattern encodes the thirteenth digit, which has no bars of its own, and it lets the scanner work out which way round the symbol is being read. A code scanned upside down decodes correctly because the parity tells the decoder to reverse it.
61 more tools
where this came from.
Same shell, same shortcuts, same promise: nothing leaves your browser.