Code 128 vs. GS1-128
Understand the critical difference between a standard Code 128 barcode and the strict GS1-128 compliance standard used for shipping.

Internal vs. External Tracking
While they share the exact same physical bar-and-space architecture, Code 128 and GS1-128 (formerly UCC-128) serve entirely different purposes in the world of logistics.
A standard Code 128 is a flexible, open-standard symbology. You can encode any alphanumeric string you want into it. If you want a barcode that simply says RACK-99-BLUE for your own internal warehouse tracking, you use standard Code 128.
The Strict GS1-128 Standard
GS1-128 is a strictly regulated subset of Code 128 used for external, global supply chain compliance (like shipping pallets to Walmart, Target, or hospitals). Because these pallets move between different companies, they must speak a universal data language.
To be a valid GS1-128 barcode, it must meet two critical requirements:
- The FNC1 Character: The data string must begin with a hidden "Function 1" control character. This instantly tells the receiving scanner, "This is not a regular Code 128; parse this using GS1 rules."
- Application Identifiers (AIs): The data must be formatted using AIs. These are standardized 2-to-4 digit codes that tell the scanner exactly what the following data means. For example,
(10)means Batch Number, and(17)means Expiration Date.
When to Use Which
If you are building an internal tracking system for your own business, use standard Code 128. It is much easier to implement and requires no formatting rules. If a retailer or logistics partner provides a compliance manual and requires a shipping label (like an SSCC or ASN), you absolutely must generate a GS1-128 barcode.
If you're generating GS1-128 barcodes for pharmaceutical or medical device labeling, use our dedicated pharmaceutical barcode generator which validates Application Identifiers for drug serialization.