GS1-128 barcode
The Code 128 subset that carries GS1 Application Identifiers, the barcode on every carton and pallet shipping label.
Also known as: UCC-128, EAN-128, UCC/EAN-128, Code 128 (GS1)
What is GS1-128?
GS1-128, formerly UCC-128 or EAN-128, is a subset of Code 128 that encodes structured data using GS1 Application Identifiers, so a single barcode can carry a GTIN, a lot number, an expiry date, a count, or a serial shipping container code together. It is the symbology behind every retailer’s carton and pallet shipping label and the case marking for anything with a lot or date.
Encodes: One or more GS1 element strings, each an Application Identifier followed by its data. Alphanumeric, opened by a FNC1 character that tells the scanner to parse AIs.
How GS1-128 is structured
GS1-128 does not have a fixed layout. It is a container for element strings, each opened by a two- to four-digit Application Identifier that tells the reader what the following data means and how long it is. These are the AIs that appear on retail shipping labels and case marks.
| Part | Length | What it means |
|---|---|---|
| (00) SSCC | 18 digits | Serial Shipping Container Code. The unique identity of one carton or pallet, matched to the 856 ASN. |
| (01) GTIN | 14 digits | The trade item the case is. A GTIN-12 or -13 is zero-padded to 14. |
| (02) GTIN of contained items | 14 digits | On a logistics unit, the GTIN of the trade items inside, paired with (37) for the count. |
| (10) Batch or lot | Up to 20 characters | Variable length. Required by grocery, pharma, and FSMA 204 traceability. |
| (11) (15) (17) Dates | 6 digits, YYMMDD | Production date, best-before date, and expiration date respectively. |
| (21) Serial number | Up to 20 characters | Item-level serial, used with a GTIN for serialized goods. |
| (30) / (37) Counts | Up to 8 digits | (30) is a variable count of items; (37) is the count of trade items inside a logistics unit. |
| (400) Customer PO | Up to 30 characters | The retailer’s purchase order number, often required on the shipping label. |
| (410) Ship-to GLN / (420) Ship-to postal code | 13 digits / up to 20 characters | Destination, expressed as a Global Location Number or a postal code. |
Specifications
- Base symbology
- Code 128, subsets A, B, and C, opened with FNC1
- Character set
- Full ASCII; numeric pairs compress in subset C
- Capacity
- 48 data characters per symbol, maximum
- Maximum width
- 165 mm including quiet zones
- X-dimension
- 0.495 mm to 1.016 mm on logistics labels
- Bar height
- 32 mm minimum on logistics labels and general-distribution cases
- Quiet zones
- 10X on the left and right
- Check characters
- Symbol-level mod 103 check character, plus the mod 10 check digit inside any GTIN or SSCC element
- Separators
- FNC1 after every variable-length AI unless it is the last element in the symbol
- Human-readable text
- AIs in parentheses beneath the bars; the parentheses are not part of the encoded data
Dimensions are GS1 General Specifications targets. Confirm against the retailer’s current routing guide before a print run.
Where it is used
- The GS1 logistics label on every carton and pallet, carrying the SSCC in (00)
- Case marking with GTIN, lot, and expiry for grocery, pharma, and perishables
- FSMA 204 traceability lot codes on food cases
- Conveyor and dock-door scanning at retailer distribution centers
- Warehouse receiving, put-away, and pick confirmation on inbound goods
Printed by the system at pack time, never drawn in advance
The data in a GS1-128 changes with every shipment: the SSCC is serialized, the lot and count depend on what went in the box, the PO number belongs to the order. So the label is generated by the WMS, OMS, or EDI platform when the carton closes and printed on a thermal printer at the pack station. A designer can produce a one-off GS1-128 for a case mark that is static, but the shipping label is operational output, and its values must be the same ones written into the 856.
Retailers whose routing guides call for it
Each retailer page covers the transaction sets, labeling rules, and reported chargebacks behind the requirement.
Mistakes that cost money
Encoding the parentheses
The parentheses are display-only. Encoding them produces a symbol that scans as text and never parses as AIs.
Missing the leading FNC1
Without FNC1 after the start code, the reader treats the symbol as plain Code 128 and no Application Identifier logic runs. The label looks right and fails at the DC.
No separator after a variable-length AI
A (10) lot followed directly by (17) concatenates into one unreadable lot number. Put fixed-length AIs first and terminate variable ones with FNC1.
Label values that disagree with the ASN
The lot printed on the case must match the lot in the 856. Two systems generating the same data independently is how they drift.
X-dimension below spec for the scan distance
Conveyor scanners at a DC read from farther away than a handheld. A 203 dpi label at the wrong scale looks fine on the pack bench and misses on the line.
Human-readable text touching the bars
Text set too tight to the symbol eats into the effective bar height and degrades the read.
How Endless handles GS1-128
EndlessEDI builds the GS1-128 label and the 856 ASN from the same shipment record, so the GTIN, lot, expiry, count, and SSCC on the carton are the values in the document by construction. Agents validate the label set against the retailer’s routing guide before the shipment is released.
Frequently asked questions
What is the difference between GS1-128 and Code 128?
GS1-128 is Code 128 with two additions: a FNC1 character right after the start code, and a data structure built from GS1 Application Identifiers. Plain Code 128 can carry any text and is fine for internal bin and asset labels. GS1-128 is what trading partners can parse.
Is GS1-128 the same as UCC-128?
Yes. UCC-128 in North America and EAN-128 elsewhere were renamed GS1-128 when the Uniform Code Council and EAN International became GS1. Many routing guides and vendor manuals still say UCC-128; they mean the same symbol.
Can a GS1-128 barcode carry my purchase order number?
Yes, in Application Identifier (400). Most retailer shipping labels print the PO in human-readable text and, where the routing guide asks for it, encode it in a GS1-128 alongside or separate from the SSCC.
Where does the SSCC barcode go on the label?
At the bottom. GS1’s logistics label layout puts free text at the top, human-readable interpretation in the middle, and barcodes in the lowest section, with the (00) SSCC as the bottom-most symbol so it is the first thing a scanner meets.
Related symbologies
Definitions in the glossary
- Advance Ship Notice (EDI 856 / ASN)→
An electronic packing list sent to the buyer before a shipment arrives.
- GS1-128 Label (Shipping Label)→
The standardized carton shipping label retailers require, carrying an SSCC.
- SSCC (Serial Shipping Container Code)→
A unique 18-digit code identifying an individual shipping carton or pallet.
Browse the full barcode symbology guide.

See it on your channels.
Spend your time on the business, not the busywork. Book a demo and watch Endless run your operations across every channel you sell on.
Get a Demo