Paste a list of codes — one per line — and generate a UPC, EAN-13, or Code128 barcode for each. Everything is drawn locally on canvas; nothing is uploaded to a server, and no account is required.
Up to 100 codes per batch — this keeps rendering fast and the tab responsive. Codes that don't fit the selected format are skipped and listed below the results with the reason (wrong length, non-numeric, or a check digit that doesn't match). If your EAN list has 12 digits (or your UPC list 11) because the check digit was never added, choose Missing — calculate it. Numbers that look damaged by a spreadsheet (a dropped leading zero, 4.00638E+12) are called out by name. For printing, pick SVG or PNG — large.
UPC-A is the 12-digit format used on retail products in the US and Canada. EAN-13 is the international equivalent (13 digits) used almost everywhere else, and is also what most UPC-A codes are stored as once padded with a leading zero. Code128 is different in kind — it isn't tied to a fixed digit count or a retail product-numbering scheme, and can encode any alphanumeric string, which makes it the right choice for internal codes, asset tags, or anything that isn't a registered retail product number.
Each barcode is rendered locally (via the open-source JsBarcode library) — to a canvas for PNG output, or as SVG vector markup — the same fundamental technique any barcode generator uses, just running entirely on your device instead of a server. You can confirm nothing is uploaded by checking your browser's Network tab while a batch runs. See this post for when generating dozens or hundreds at once actually comes up in practice, beyond one-off product labels.
Up to 100 codes per batch. EAN-13 and UPC-A require the correct digit count and a valid checksum digit at the end — codes that don't validate are skipped and listed separately, each with the reason, rather than silently producing a broken barcode, since a barcode that fails to scan at checkout is a worse outcome than an obvious error message. Spaces and hyphens inside EAN/UPC numbers (0 36000 29145 2, 036000-291452) are stripped before checking.
Technically yes, this tool will produce a valid UPC/EAN barcode from any correctly-formatted number — but most marketplaces require the underlying number itself to be registered through GS1 (the organization that issues UPC/EAN prefixes) to avoid conflicting with another seller's product. This tool handles the barcode image; it doesn't register or validate ownership of the number itself. If you're not sure which format your marketplace actually expects, this comparison breaks down where UPC-A, EAN-13, and Code128 are each used.
A 12-digit number means one of two different things, and the tool can't guess which. It might be a complete UPC-A (12 digits including its check digit) — in that case select UPC-A; the same product as an EAN-13 is simply the UPC with a leading zero. Or it might be the first 12 digits of an EAN-13 whose check digit was never added — common when numbers come out of a spreadsheet or an ERP export. In that case set Check digit to Missing — calculate it and the 13th digit is computed for each line and shown under the barcode.
Yes — choose Missing — calculate it. Enter 12 digits per line for EAN-13 or 11 for UPC-A. The check digit is the standard GS1 mod-10: counting from the rightmost digit, multiply alternately by 3 and 1, add the results, and the check digit is whatever brings the sum up to the next multiple of 10. The downloaded file is named after the full code, so you can match each PNG back to its row. Leave the default Included — validate it on when your numbers are already complete: a wrong last digit is then caught as a probable typo instead of being quietly replaced.
For EAN-13 and UPC-A, a code is skipped if it isn't purely numeric, isn't the exact expected length, or fails the format's built-in checksum validation (the last digit is calculated from the others specifically to catch typos and transcription errors). Code128 has no such restriction and accepts any alphanumeric string. Each skipped code is listed with its reason — including, for a checksum failure, which last digit the number should have had.
SVG if your label or design software accepts it (most do — Illustrator, Inkscape, Affinity, Canva, Word, and most label programs). It's vector, so it stays sharp at any size and you can scale it to exactly the width you need. PNG — large draws every bar 4 pixels wide, which at 300 dpi comes out close to the nominal 100% size of a retail UPC-A (a 0.33 mm narrow bar, about 37 mm across including the margins). The default PNG — screen size is fine for spreadsheets, web pages, and previews, but it's small enough that a printer has to enlarge it. Enlarging a bitmap softens bar edges, and soft edges are what make scanners hesitate. Whichever you use, scale the barcode as a whole — stretching it in one direction only changes the bar-width ratios. For retail checkout, GS1 allows roughly 80% to 200% of the nominal size.
Spreadsheets damage barcode numbers in two predictable ways, and the skip list names both. Leading zeros get dropped, because Excel treats the column as a number, so the UPC 036000291452 arrives as the 11-digit 36000291452. When adding the zero back gives a valid code, the tool says so and shows the full number. Long numbers turn into scientific notation (4.00638E+12), and by then the real digits are gone from the cell, so no tool can recover them. In both cases the fix is in the spreadsheet: format the column as Text before pasting or importing the codes, then copy them again. Why Excel mangles long numbers covers the details. One trap to watch for in Missing — calculate it mode: an 11-digit UPC that only lost its leading zero looks exactly like a UPC body that is missing its check digit. When both readings produce a valid code, the result carries a warning so you can check before printing.
No. GS1-128 (the format still widely called EAN-128 or UCC-128) looks exactly like Code128, but it begins with a special FNC1 character and carries data in Application Identifiers such as (01) for a GTIN or (17) for an expiry date. The Code128 option here produces plain Code128 without FNC1, so typing (01)… into it gives you a barcode that scans but that a GS1 receiving system won't parse as structured data. For carton and pallet labels use GS1-aware label software. Why EAN-128 isn't an alternative to UPC explains where each one belongs.