
UCC/EAN-128 Barcode - Application Identifier Standard
GS1-128, originally designated UCC/EAN-128 until 2005, is a barcode standard that encodes variable-length product data using Application Identifiers (AIs) — standardized prefixes that define what each data field means. Developed in the 1990s through collaboration between the Uniform Code Council and European Article Numbering Association, this symbology uses Code 128 encoding with special function characters to pack shipping, batch, and expiration information into a single label. It dominates supply chain and logistics applications worldwide.
UCC/EAN-128 Symbology Overview
The UCC/EAN-128 standard created a universal method for encoding complex supply chain data. When UCC and EAN merged into GS1 in 2005, the naming convention changed to GS1-128, but the underlying technology remained identical.
Simple product identification barcodes encode one data element. UCC/EAN-128 labels encode multiple data elements in a single symbol. A typical label contains a Serial Shipping Container Code (SSCC), batch number, expiration date, and quantity — all readable in one scan. The Code 128 barcode symbology serves as the foundation because it efficiently encodes alphanumeric data and includes the special FNC1 character that distinguishes GS1-128 from standard Code 128.
The FNC1 character appears immediately after the start character, signaling to the scanner that Application Identifiers follow. This prevents confusion when scanning regular Code 128 symbols that might contain similar number sequences. Modern barcode scanners recognize FNC1 and parse the subsequent data according to GS1 specifications rather than treating it as a generic alphanumeric string.
Application Identifiers (AI) Explained
Application Identifiers are two-to-four-digit prefixes that define the meaning and format of the data that follows. AI (01) always indicates a Global Trade Item Number (GTIN). AI (10) designates a batch or lot number. AI (17) specifies an expiration date in YYMMDD format. GS1 maintains over 150 standardized AIs covering everything from product weight to geographic coordinates.
AIs divide into two categories: fixed-length and variable-length. Fixed-length AIs like (01) for GTIN always contain exactly 14 digits, so the scanner knows where the data field ends. Variable-length AIs require either a FNC1 separator character to mark the end of the field or must appear last in the barcode data string. AI (21) for serial number is variable-length — six characters for one manufacturer, twenty for another.
The AI system provides standardization without rigidity. A pharmaceutical company might encode AI (01) for the National Drug Code, AI (17) for expiration, AI (10) for batch, and AI (21) for serialization. An automotive parts supplier uses the same AI (01) for their GTIN but adds AI (30) for quantity and AI (240) for additional product identification. Both follow the same specification while encoding industry-specific requirements.
Most implementation failures happen because people don’t consult the GS1 General Specifications document. AI data formats aren’t arbitrary — AI (17) expiration dates use YYMMDD, period. Deviation breaks interoperability across the entire supply chain. I’ve seen warehouse systems reject shipments because someone decided to use MMDDYY format instead.
GS1-128 Standard Implementation
Implementing GS1-128 requires understanding the data concatenation rules. When multiple AIs appear in sequence, fixed-length AIs flow directly into the next without separators. Variable-length AIs either need a FNC1 character as a field separator or must terminate the data string. The human-readable interpretation (HRI) below the barcode should show the data with AI numbers in parentheses: (01)00312345678906(17)251231(10)ABC123.
Label design matters more than people realize. The barcode should include adequate quiet zones — at least 10X (ten times the X-dimension or narrowest bar width) on each side. For warehouse scanning at distances up to 24 inches, an X-dimension of 0.0165 inches (0.42mm) represents the practical minimum. Larger labels with 0.030-inch X-dimensions scan more reliably in automated systems.
The start pattern consists of a standard Code 128 start character (Start A, B, or C depending on the initial data) followed immediately by FNC1. Many encoding errors occur because developers forget that FNC1 in position one makes it GS1-128 rather than generic Code 128. Software libraries handle this automatically, but manual implementations often miss this critical detail.
Testing should cover both the physical label quality and the data structure. Verify bars and spaces meet the minimum edge contrast according to ISO/IEC 15416 with a verifier showing grade C or better. Then confirm the decoded data parses correctly according to AI specifications — dates validate as real dates, GTINs pass check digit verification, and variable-length fields contain only permitted characters.
Supply Chain Applications
GS1-128 dominates logistics because it answers the fundamental question every shipment poses: what’s in this container, where did it come from, and where is it going? The Serial Shipping Container Code (SSCC) encoded with AI (00) provides a unique identifier for each pallet, case, or logistics unit. Scan one label and the warehouse management system retrieves the complete bill of materials.
Pharmaceutical serialization regulations worldwide mandate GS1-128 or Data Matrix barcodes containing the National Drug Code, serial number, lot, and expiration. The FDA’s Drug Supply Chain Security Act requires this data for track-and-trace throughout distribution. A single GS1-128 label on a drug carton contains everything needed to verify authenticity and recall specific batches if safety issues emerge.
Automotive manufacturing relies on GS1-128 for just-in-time parts delivery. Suppliers encode AI (01) for the part number, AI (30) for quantity, AI (21) for the unique container serial, and often proprietary AIs for plant-specific routing information. The receiving dock scanner reads the label, and the automated guided vehicle knows which production line needs those components.
Food traceability programs use AI (02) for trade item content when a shipping case contains multiple consumer units, combined with AI (10) for batch and AI (13) for packaging date. When contamination occurs, retailers identify every case from the affected production run and remove them from shelves within hours rather than days.
Technical Specifications and Examples
A complete GS1-128 implementation for a case of pharmaceutical products might encode: (01)03012345678906(17)251231(10)ABC123(21)987654321. This translates to a 14-digit GTIN, expiration date December 31, 2025, batch ABC123, and serial number 987654321. The barcode itself contains these elements without parentheses, using FNC1 as a separator after the serial number if additional AIs follow.
The Code 128 character table shows three character sets (A, B, C) that can be switched mid-symbol for optimal encoding density. GS1-128 typically starts with Code Set C for numeric AI prefixes like (01) or (17), switches to Code Set B for alphanumeric batch codes, then returns to Code Set C for numeric serial numbers. Modern encoding software handles these shifts automatically to minimize symbol length.
Symbol length varies with data content. A label encoding only an SSCC creates roughly 70-80 bars and spaces. Add expiration date, batch, and serial number, and you’re looking at 120-150 bars. The maximum theoretical length for Code 128 is 1662 bars, but practical implementations rarely exceed 300 bars because scanning reliability degrades with longer symbols.
Check digit calculation follows standard Code 128 modulo-103 methodology, but each AI may define its own check digit within the data field. The GTIN in AI (01) includes its own modulo-10 check digit as the 14th character. This layered validation catches both scanning errors and data entry mistakes during label creation.
Frequently Asked Questions
Q: What’s the difference between UCC/EAN-128 and GS1-128?
Nothing. They’re the same standard with different names from different time periods. UCC/EAN-128 was the original designation when the Uniform Code Council and European Article Numbering Association collaborated in the 1990s. When these organizations merged to form GS1 in 2005, the standard was renamed GS1-128. Equipment and software supporting UCC/EAN-128 works identically with GS1-128 labels — the FNC1 character and Application Identifier structure remained unchanged.
Q: Can I put any data I want in a GS1-128 barcode?
No. GS1-128 is a closed standard controlled by GS1, and you must use their defined Application Identifiers. Want to encode a batch number? Use AI (10). Need an expiration date? Use AI (17). Creating custom AIs breaks interoperability and violates the standard. If you need completely proprietary data encoding without AI restrictions, use regular Code 128 instead. However, for supply chain applications requiring trading partner interoperability, you’ll find GS1 already defined an AI for nearly every conceivable data element.
Q: Do I need special software to create GS1-128 barcodes?
Most modern barcode generation software supports GS1-128 natively, handling the FNC1 character insertion and AI validation automatically. The critical requirement is software that properly encodes the FNC1 function character in position one and validates data against AI specifications. Free tools exist, but verify they generate scannable symbols meeting ISO/IEC 15417 standards before deploying labels in production. Testing with a barcode verifier, not just a scanner, ensures compliance.