Sign In
Products
ZPL PreviewBarcode GeneratorImage → ZPLZPL cheat sheetLabel DesignerTemplate Gallery
Developers
API QuickstartAPI ReferenceMCP ServerBulk GenerationWebhooksSDKs & ExamplesLimitsOn-Premise
Solutions
Logistics & ShippingE-CommerceERP & WMSManufacturingRetailHealthcare & LaboratoryAll solutions
Tools
ZPL Diagnostics HubZPL DebuggerSize & DPI AnalyzerDPI ConverterBarcode fit calculatorShipping Label AnalyzerFont InspectorOrientation DebuggerCalibration AssistantPrinter Compatibility CheckerBarcode Readability CheckerPrinter Language DetectorThermal Printer Test PackZPL ToolsEPL ToolsTSPL ToolsCPCL ToolsAll ToolsGuidesPricing
Language
EnglishTürkçeDeutsch
HomeGuidesGS1-128 vs Code 128
Guides › GS1-128 vs Code 128

GS1-128 vs Code 128

Published:

Put a GS1-128 label next to a Code 128 one and you cannot tell them apart: same bar patterns, same character set, often the same width. The difference is one character you never see, and systems downstream act on it.

What actually differs

GS1-128 is Code 128 with FNC1 in the first position. FNC1 prints nothing and adds no readable character; it changes what the symbol declares itself to be. A scanner reports a symbology identifier with the data — ]C1 for GS1-128, ]C0 for plain Code 128 — and receiving systems branch on that identifier. The same is true in two dimensions: GS1 Data Matrix reports ]d2, plain Data Matrix ]d1. A plain symbol carrying the same text is not GS1, no matter how correct the text looks.

Application Identifiers, and the parentheses trap

GS1 data is a sequence of Application Identifiers: (01) GTIN, (17) expiry, (10) batch. The parentheses are a human-readable convention only. They are printed under the bars; they are not encoded. Send (01)09501101020917 as plain data and the brackets are encoded as literal characters — the receiving system either rejects the string or, worse, accepts a GTIN that has two stray characters in it.

The second trap is separators. AIs with a fixed length ((01) is always 14 digits) need nothing after them. Variable-length AIs (a batch code) must be terminated with FNC1 when another AI follows — otherwise the batch code swallows the next field and both are wrong, silently.

Why "worse than no barcode"

A missing barcode stops the line: someone notices immediately and fixes it. A structurally wrong one scans fine at your desk and fails at the counterparty — a distribution centre, a hospital system, a carrier hub — days later, on a pallet that has already shipped. The cost is not the reprint; it is the investigation, the chargeback and the trust.

How we handle it, and what that means for you

Our engine refuses to fake it. If the GS1 encoder is unavailable, it does not draw a plain symbol and call it GS1 — it produces no barcode and returns a warning instead. That decision is worth copying in your own pipeline: a validation gate that fails loudly beats one that emits something plausible.

What to check before a run: does the symbol declare GS1 (identifier), are the parentheses absent from the encoded data, and are variable-length AIs terminated? Paste the label into the ZPL viewer to see what you produced, and use barcode verification on a printed sample to read back what the scanner will actually get. If the label came from a carrier, do not re-encode it at all — see working with carrier ZPL labels.

Frequently asked questions

Is GS1-128 a different symbology from Code 128?

No. It is Code 128 with FNC1 in the first position. The bars are drawn the same way; what changes is the symbology identifier the scanner reports (]C1 instead of ]C0) and therefore how receiving systems treat the data.

Do the parentheses in (01)09501101020917 get encoded?

No. They are a human-readable convention printed under the bars. If you send them as data they are encoded as literal characters and the receiving system sees a GTIN with two stray characters in it.

Why is a wrongly encoded barcode worse than a missing one?

A missing barcode stops the line immediately. A structurally wrong one scans fine on your desk and fails days later at the counterparty, on goods that already shipped — the cost is the investigation and the chargeback, not the reprint.

Related guides

What is ZPL?

ZPL is the language Zebra thermal printers understand. How to read the commands, how a label is put together, and the most common mistakes.

Which barcode symbology should I use?

EAN-13, Code 128 or QR? Practical rules for picking a barcode based on your data, your space and the scanner that has to read it.

How to preview a ZPL file without a printer

A ZPL file is just text — the label only exists once something draws it. Three practical ways to see a ZPL label before it reaches the printer.

Try your own ZPL code →