Barcode generator — one, or a thousand

Type a value for a single barcode, or paste a whole list for bulk PNG files packaged as a ZIP. No limits, no sign-up — your list never leaves this page.

Bulk: one value per line

Each line becomes barcode-001.png, barcode-002.png… Invalid lines are listed and skipped.

How to use — step by step

One barcode when you need it, a whole list when you don't want to pay per label.

  1. Pick the symbology: CODE128 for arbitrary text, CODE39 for legacy systems, EAN-13/EAN-8/UPC for retail products (which require GS1-issued numbers), ITF-14 for cartons, MSI or Pharmacode for specific industry uses.
  2. For a single code: type the value and watch it render. Format violations — letters in an EAN-13, wrong digit counts — are flagged inline.
  3. Adjust bar width and height for your printer: wider bars survive cheap thermal printers; taller bars scan from farther away.
  4. For a batch: paste one value per line into the bulk box — SKUs, serials, coupon codes.
  5. Press 'Generate & download ZIP'. Every valid line becomes barcode-001.png, barcode-002.png… packaged together; invalid lines are listed with the reason.
  6. Test-scan one printed code with your actual scanner before printing the whole batch.

How it works

Rendering runs on the JsBarcode engine on a canvas: each symbology has strict payload rules, including check digits — EAN-13 accepts 12 digits and computes the 13th, UPC-A accepts 11 and computes the 12th, and invalid values are rejected rather than silently drawn as unscannable lines.

The bulk path renders each line to its own canvas, exports it as a PNG data URL, and hands the collection to JSZip, which builds the archive in browser memory. Nothing touches a server — the only limit on batch size is your machine's memory, and a thousand product labels is a routine job.

Retail caveat worth knowing: if a barcode will appear on products sold through retail channels, the number inside it (GTIN) must come from a GS1 prefix licensed to your company — the tool draws any valid number, but legitimacy of the number is a GS1 matter, not a rendering matter.

Two physical rules decide whether a barcode scans: quiet zones and contrast. Every symbology requires blank margin on the left and right of the bars — cramped labels fail scanners even when the bars are perfect. And scanners read the difference between dark bars and light space, so print dark bars on light, unpatterned stock; reversed (white-on-dark) or colored combinations frequently fail. The tool's white background exists for exactly this reason.

For batch label sheets, remember the PNGs are per-value: lay them out in your label software at 100% scale — scaling in the layout tool is where bar widths get distorted past scanner tolerance.

Frequently asked questions

Which format should I choose?

Internal use: CODE128 (any text). Retail products: EAN-13 (most of the world) or UPC-A (North America), with a GS1-licensed number. Shipping cartons: ITF-14.

Why was one line skipped in my batch?

It violated the symbology's rules — wrong character set or length. The skipped values are listed so you can fix and regenerate just those.

How big should I print the bars?

Follow your scanner's spec: typical retail scanners want bars at least 80% of nominal size with a quiet zone on each side. When in doubt, print a test page and scan it at your real distance.

Are the PNGs transparent?

They render on white for maximum scanner contrast. For colored packaging, keep the bars dark on a light, unpatterned area.

My EAN-13 was rejected — is the tool broken?

No: 12 digits are expected (the 13th check digit is computed). A 13-digit input with a wrong check digit is also rejected, because it would print as an unscannable code.

Can I print the barcodes in color?

Scanners read red light, so red bars on white fail while black, blue and green bars work. When in doubt: black on white.

Why CODE128 instead of CODE39 for internal use?

CODE128 packs more data into less space and accepts the full ASCII set; CODE39 exists for legacy systems that require it. New internal labels: CODE128.

Related tools