Generate standards-compliant GS1-128 barcodes.

Turn an EAN-13 or GTIN-14 into a fully framed GS1-128 (EAN-128) barcode with batch numbers, dates, weights, serials and more — all validated against the GS1 General Specifications.

Create a barcode

Step-by-step guided wizard. One question at a time. Auto-validates check digits and Application Identifiers as you type.

Start the wizard

Bulk import

Upload a CSV or XML file and generate multiple barcodes at once. Download templates with example rows. Demo limited to 6 barcodes per file.

Open bulk import

A quick primer on GS1 barcodes

What is a GS1-128 barcode?

GS1-128 (formerly called EAN-128) is a high-capacity, variable-length barcode based on the Code 128 symbology. Unlike a plain EAN-13 on a consumer product — which only carries the product identifier — a GS1-128 can pack together multiple pieces of information in a single scan: the product GTIN plus batch number, production date, best-before date, net weight, serial number, purchase order, and so on.

It's the standard barcode for logistics and supply-chain labels: warehouse pallets, case labels, shipping cartons, healthcare traceability labels, fresh-food date coding.

How does it work?

Each piece of data is prefixed by a 2-, 3- or 4-digit Application Identifier (AI) that tells the scanner what it is. For example:

  • (01) — GTIN (Global Trade Item Number)
  • (10) — batch / lot number
  • (15) — best-before date (YYMMDD)
  • (17) — expiry date (YYMMDD)
  • (3103) — net weight in kg with 3 decimal places
  • (21) — serial number

Variable-length fields are followed by a special separator character called FNC1 so the scanner knows where one field ends and the next AI begins.

Do I need to register with GS1?

Yes — if you want your barcode to be globally unique and scannable by retailers, distributors or customs. GS1 is the only organisation that issues legitimate GTIN / EAN company prefixes.

  1. Join your national GS1 member organisation (in the UK this is GS1 UK).
  2. You'll be assigned a GS1 Company Prefix. From that prefix you create your own GTINs for each product variant.
  3. Pay the annual licence fee (tiered by number of GTINs and company turnover).

Internal-only barcodes (inside your own warehouse) don't strictly need GS1 registration, but any barcode that leaves your site must use a genuine, licensed GTIN — otherwise it risks collisions with other companies' codes.

Structure of a GTIN

A GTIN-13 (the 13-digit EAN on consumer packaging) is made up of:

  • Country / numbering-system prefix (first 2–3 digits)
  • Your GS1 Company Prefix (4–10 digits, assigned to you)
  • Item reference (the rest, assigned by you)
  • A check digit (last digit, calculated using a weighted mod-10 algorithm)

A GTIN-14 wraps a GTIN-13 with an extra packaging indicator digit (0–9) at the front, identifying how the goods are packed (inner, case, pallet, etc.), and its own recalculated check digit.

This tool validates all of the above automatically — the wizard flags bad check digits and tells you exactly what the correct digit should have been.

Where to learn more

Official GS1

The global standards body. Free PDF of the GS1 General Specifications (the definitive rulebook) is published here.

gs1.org →

GS1 UK (registration)

UK member organisation. Start here if you're a UK business and need to apply for a company prefix and GTINs.

gs1uk.org →

This project's spec

The full technical specification used to build this tool — check-digit algorithms, AI table, FNC1 rules, encoding details.

SPECIFICATION.md on GitHub →

How this tool fits in

You already have your GS1 company prefix and GTINs — this generator helps you compose valid supply-chain labels from them. It doesn't issue GTINs (only GS1 can), but it does:

  • Validate every EAN-13 / GTIN-14 you type against the mod-10 check digit.
  • Walk you through the Application Identifiers step by step, with plain-English prompts and instant format checking.
  • Place the FNC1 separators correctly — a surprisingly common source of bugs in home-grown generators.
  • Render the final barcode as PNG, SVG or PDF, ready to print onto labels.

Good for: warehouse operators, small food producers, pharmacies and anyone preparing logistics labels without a full WMS. Not a substitute for certified label-printing software in highly regulated environments (medical devices, some pharma).

FAQ

Only for internal use. A retail-facing EAN-13 must come from a GS1-assigned company prefix, otherwise it will clash with someone else's real GTIN and cause ugly confusion in retail scanners and online marketplaces (Amazon, in particular, enforces this).

For internal use do it properly: EAN-13 codes starting with the prefix range 020029 are reserved by GS1 for in-store / restricted circulation. They are never assigned to any company's products, so they're guaranteed not to collide with a real GTIN. Use them for:

  • warehouse bin / location labels
  • variable-weight items priced at the till (deli, butcher, produce)
  • internal asset tagging, tote IDs, work-in-progress tracking

Structure: 02 X XXXXXX CCCCC D — the leading 02 marks it as internal, the next digit identifies the store / department (your own convention), then your item reference, then the standard mod-10 check digit. This tool will validate the check digit for any 020–029 code you enter, same as a real GTIN.

EAN-13 and GTIN-13 are essentially the same thing — a 13-digit identifier on consumer-unit packaging. GTIN-14 is a 14-digit form used on cases and pallets (one extra packaging-indicator digit up front). GS1-128 is a barcode format (based on Code 128) that can carry a GTIN plus additional data like batch and expiry using Application Identifiers.

That's the FNC1 separator (ASCII 0x1D / GS). It's how the scanner knows a variable-length Application Identifier has ended. Most POS / WMS software strips it or converts it to a field separator automatically. Your barcode without FNC1 between variable-length AIs is not a valid GS1-128 — this tool places them for you.

48 data characters, per the GS1 General Specifications. This tool enforces that limit and will tell you if your combination of AIs exceeds it before you print a label that scanners will refuse.