Create EAN-13, EAN-8, UPC, ITF-14, CODE128 and CODE39 barcodes and download the PNG — all in your browser.
A barcode is a number written in bars: each character becomes a fixed pattern of black bars and white spaces that a scanner reads as a sequence of widths. The families split in two. EAN-13, EAN-8 and UPC-A are the retail codes — digits only, fixed length, ending in a check digit — and ITF-14 is their cousin for the shipping cases those products travel in. CODE128 and CODE39 are free-form: they accept letters and symbols, have no fixed length, and are what warehouses, libraries and asset-tracking systems use when the number is theirs to invent.
The check digit is what people get wrong most often, so the tool computes it for you. The GS1 modulo-10 rule multiplies the digits alternately by 3 and 1 from right to left, adds them up and takes whatever is missing to reach the next multiple of ten. Type 978030640615 as an EAN-13 and you get 9780306406157; paste all 13 digits and the last one is verified instead, with the correct digit shown when it does not match. Length and character set are checked against the chosen format before anything is drawn — CODE39 refuses lowercase and accents, CODE128 refuses anything outside plain ASCII — so an impossible code gets a clear message instead of a symbol no scanner would read.
The drawing happens on an HTML canvas in your browser, with the open-source JsBarcode library served from this site and loaded only when you generate the first code. That makes the tool handy for printing shelf labels in a small shop, tagging stock and equipment, mocking up packaging, or filling a test environment with codes that scanners really read. One honest caveat: drawing a valid EAN-13 does not make the number yours. Retail GTINs are assigned by GS1 — GS1 Brasil, here — and printing a code that belongs to another company will collide with their product at the checkout. Use your own registered numbers for retail, and whatever you like internally.
GS1 check digit (EAN-13, EAN-8, UPC-A, ITF-14): read the body of the code from right to left multiplying the digits alternately by 3 and 1, add everything up, and the check digit is (10 - sum mod 10) mod 10.
No. The number, the barcode image and the PNG are all produced in JavaScript on your own device — nothing is transmitted to any server and nothing is stored. The only file downloaded is the drawing library itself, from vai.la, and only when you generate your first code.
Only if the number is already yours. The tool draws whatever you type; it does not assign anything. Retail codes must be licensed from GS1 so that no two products in the world share a GTIN. For internal labels, inventory and asset tags, any number works.
EAN-13 is the worldwide default for retail products, EAN-8 exists for packages too small for it, UPC-A is the North American variant and ITF-14 goes on shipping cases. For internal labels use CODE128, which is compact and accepts letters; CODE39 is older and less dense, but some legacy systems still require it.
Because the last digit of EAN-13, EAN-8, UPC-A and ITF-14 is a check digit calculated from the ones before it. If you type only the body, the tool completes it and tells you which digit it added, so you can record the full number.
In most cases yes, with a few printing rules: solid black on white, never stretched horizontally, and with the white margin around the symbol left intact (the tool already adds one). Avoid shrinking it much below its nominal size — the bars blur and scanners start to fail.
Vai.la turns any URL into a short link with click statistics, QR Code and your own biolink.
Vai.la is not responsible for how the tools are used or for decisions made based on their results.