GS1-128 (EAN-128) explained: Application Identifiers
GS1-128 looks like an ordinary barcode with brackets in the text. Those brackets are the whole point — they turn raw data into something every supply-chain system understands. It used to be called EAN-128, and you will still see it written EAN 128 or UCC/EAN-128.
GS1-128 is a barcode standard built on the Code 128 symbology. What sets it apart is structure: instead of encoding free text, it uses Application Identifiers (AIs) to label each piece of data, so a scanner anywhere in the chain knows whether it is reading a product number, a batch, an expiry date or a pallet ID.
What is an Application Identifier?
An AI is a short numeric code, shown in brackets, that declares the meaning of the data that follows it. A single GS1-128 barcode can chain several AIs together. Common ones include:
| AI | Meaning | Example |
|---|---|---|
| (00) | SSCC — serial shipping container code (logistics unit) | (00)123456789012345675 |
| (01) | GTIN — the product number | (01)05601234567892 |
| (10) | Batch / lot number | (10)ABC123 |
| (11) | Production date (YYMMDD) | (11)260720 |
| (17) | Expiry date (YYMMDD) | (17)261231 |
| (21) | Serial number | (21)000042 |
So a single logistics barcode reading (01)05601234567892(10)ABC123(17)261231 says, unambiguously: this GTIN, from this batch, expiring on that date — all in one scan.
How it differs from plain Code 128
| Code 128 | GS1-128 | |
|---|---|---|
| Data | Free text, any structure | Structured via Application Identifiers |
| Special start | None required | Leading FNC1 character |
| Meaning of data | Defined by you | Standardised across all GS1 users |
| Typical use | SKUs, internal labels | Logistics, pallets, regulated supply chains |
Under the hood, GS1-128 is Code 128 — the difference is the leading FNC1 character and the AI conventions that give the data a shared, machine-readable meaning. That is why fixed-length AIs need no separator, while variable-length ones are separated by an FNC1 function character.
Where GS1-128 is used
It is the workhorse of logistics and regulated supply chains: shipping labels, pallet and case labels, and anywhere batch, expiry or serial data must travel with the product number. Retail checkouts still use EAN-13 or UPC-A on the consumer unit; GS1-128 lives on the boxes and pallets behind them.
A malformed string still draws
This is where GS1-128 catches people out. Put a 13-digit number in (01) instead of 14, or write a date as 20.01.2026 instead of 260120, and the symbology raises no objection: Code 128 encodes those characters quite happily. You get an image that looks right, and that a scanner reads without complaint — but the system at the other end cannot pull a GTIN out of it. Nothing shows on the label. It shows up in the warehouse of whoever receives the pallet.
Many free generators draw the string exactly as it comes, without checking it.