EAN Check.comEAN Check.com

GS1-128 Parser

Paste any GS1-128 barcode, paren notation, FNC1-delimited scanner output, or GS1 Digital Link URL, and get every Application Identifier broken down with validation, category colour-coding, and round-trip export to all three formats plus QR code.

By The eancheck teamPublished

Format: waiting for input

Try an example

What is a GS1-128 barcode?

A GS1-128 is a Code 128 barcode carrying structured data defined by GS1. On its own, Code 128 is just a way of encoding arbitrary text into bars and spaces. What makes a Code 128 barcode a GS1-128 is the FNC1 character at the start, which tells downstream software: the bytes that follow are a stream of GS1 Application Identifiers and their values, not free-form text.

You see them on logistic labels (pallet tags, carton labels), pharmaceutical packaging, and fresh-food weigh tickets. One symbol can pack a GTIN, a batch number, an expiration date, a serial number, a net weight, and a shipping container code all at once. That density is why GS1-128 has been the logistics workhorse since the 1990s.

The parser on this page doesn’t care whether you pasted a raw GS1-128 scan, a human-readable paren string off a label, or a GS1 Digital Link URL: it normalises all three into the same AI breakdown and lets you export to whichever form you need next.

Application Identifiers, in one page

An Application Identifier is a two-, three-, or four-digit code that prefixes a value and tells you what the value means. AI (01) always means “the next 14 digits are a GTIN”. AI (17) always means “the next 6 digits are an expiration date in YYMMDD format”. AI (10) means “what follows is a batch number, up to 20 alphanumeric characters, terminated when you hit the next FNC1”. Every AI is documented in the GS1 General Specifications, and once you internalise half a dozen common ones you can read most GS1-128 labels at sight.

The categories group naturally. Identification AIs like (01) GTIN, (00) SSCC, and (02) contained GTIN are primary keys for trade items and logistic units. Traceability AIs like (10) batch and (21) serial attach per-unit provenance. Dates — production, best-before, sell-by, expiry — all share the 6-digit YYMMDD format. Measurementsin the 3xxx range encode weight, length, and volume with an implicit decimal place determined by the last digit of the AI itself (so (3103) means “net weight in kilograms with 3 decimals”). LogisticsAIs like (400) purchase order and (410)–(417) GLNs identify parties and shipments.

Try editing the example below. Click any segment to see its full definition — name, format rule, help text, a real example, and validation errors if the value doesn’t conform.

Anatomy of a GS1-128 string

Click any segment below to open a breakdown. Edit the input to replace the example with your own string.

Identification

AI 01: Global Trade Item Number

The primary product identifier, 14 digits with a GS1 mod-10 check digit. Shorter GTINs (8/12/13) are padded with leading zeros.

Value
09506000134352
Format
Numeric, exactly 14 characters
Example
09506000134352

Segment colours match the category palette used in the parser’s breakdown cards.

Fixed vs variable length, and why FNC1 exists

The most common first question about GS1-128 is: how does a scanner know where one AI ends and the next begins? The answer depends on the AI. Fixed-length AIs — the ones where the General Specifications defines an exact byte count — need no separator. AI (01) is always 14 digits, AI (17) is always 6. As soon as the parser reads the code, it knows exactly how many bytes to grab.

Variable-length AIs are the problem. AI (10) batch can be anywhere from 1 to 20 characters. When it appears in the middle of a string, the parser doesn’t know where to stop reading the batch number and start reading the next AI. GS1 solves this with the FNC1 function character (ASCII 29, invisible in the printed label but included in the barcode encoding). Variable AIs that aren’t at the end of the string MUST be terminated by an FNC1. The parser here accepts both the raw FNC1 byte and the human-readable ]C1 symbology identifier that some scanners emit as a prefix.

Where you see them in the wild

GS1-128 shows up anywhere a single item carries more context than just a GTIN. A few places you’ve probably already scanned them without noticing.

Logistic labels (GS1-128 is the label standard)

Every pallet shipped between trading partners in Europe or North America carries an SSCC label, and the SSCC itself is AI (00). The same label often carries a GTIN-14, a batch, a best-before date, and a GLN of the destination. If you’ve ever received goods at a warehouse dock, you’ve seen GS1-128.

Pharmaceutical serialisation

Under the EU Falsified Medicines Directive and the US DSCSA, every prescription drug pack carries a 2D Data Matrix encoding (01) GTIN, (17) expiry, (10) batch, and (21) serial. That’s four AIs in one symbol, every one of them critical for anti- counterfeiting and recall traceability. Parse any of those codes here and you’ll see the full chain.

Fresh food and weight-variable items

Chicken breast packs at the supermarket, deli cheese wedges, butcher weigh tickets — anything sold by weight carries a variable-count AI (30), a net weight in the 31xx range, and usually a sell-by date (16). The cash register reads the GTIN, looks up the price per kilogram, and multiplies by the encoded weight. Without GS1-128, that workflow doesn’t exist.

Fishery and food traceability

Seafood carries a cluster of traceability AIs in the 7xxx range: (7005) catch area, (7006) first freeze date, (7008) species, (7009) fishing gear type. Regulators in the EU and several Asian markets require these to be scannable so the fish can be traced from catch to consumer. Paste a real seafood label and every one of these gets decoded.

Decoding pitfalls and common errors

A well-formed GS1-128 is unambiguous, but labels in the wild are rarely pristine. Here are the things the parser catches and the things it deliberately doesn’t.

What the parser doesn’tcatch is semantic correctness: if your GTIN is valid but points at the wrong product, the tool can’t know that. For cross-referencing against a product master, use the output of this parser as input to your PIM or ERP.

Frequently asked questions

What's the difference between GS1-128 and a GS1 Application Identifier?

GS1-128 is the barcode symbology — the physical arrangement of bars and spaces, based on Code 128. Application Identifiers are the semantic layer riding inside that symbology: two-to-four-digit codes that tell you what kind of data follows (GTIN, batch, expiry, weight, etc.). A GS1-128 label is a stream of AIs and their values printed in Code 128. Same AIs also appear in GS1 Data Matrix and, these days, in GS1 Digital Link URLs. The parser here is AI-aware, so it accepts any of those carriers.

What does the ]C1 symbol at the start of a scanner output mean?

It's the GS1 symbology identifier for Code 128 with an FNC1 start character. Your scanner prepends it so downstream software knows the string is a GS1 data carrier and not a plain Code 128 barcode. The parser strips it automatically and continues from the first AI. If your scanner is configured to suppress symbology identifiers, you won't see it — the parser handles both cases.

Why are some AIs fixed-length and others variable-length?

Fixed-length AIs like (01) GTIN, (17) expiration date, or (3103) net weight always take exactly the same number of digits after the code. Variable-length AIs like (10) batch, (21) serial, or (8200) extended packaging URL can be up to some maximum, and they're terminated by an FNC1 character (ASCII 29) or by the end of the string. The split matters when you're decoding a raw scan: without the FNC1 separator, a variable-length batch would run into the next AI's digits and corrupt the parse.

Can I scan a GS1-128 with my phone camera?

Not the linear Code 128 form directly. Phone cameras are optimised for 2D symbols (QR and Data Matrix), and while some reader apps can decode Code 128, native phone cameras usually can't. The modern answer is to print a GS1 Digital Link URL as a QR code instead — same AI data, but encoded as a URL that any phone camera opens directly. The parser on this page gives you that URL for every input as one of the three export formats.

How do I know which AIs are in a barcode without scanning it?

On a label, GS1-128 strings are typically printed in human-readable form directly under the bars, with each AI in parentheses: (01)09506000134352(17)260401(10)ABC123. Paste that into the tool and you'll get the full breakdown. For the raw scanner output (no parens, with FNC1 separators), the tool also accepts that form — point a hand scanner at your input field and the text will arrive intact.

Is (01) the same as EAN-13? What's the relationship?

AI (01) is a GTIN-14, always 14 digits. EAN-13 is the classic retail barcode — 13 digits. When you encode an EAN-13 as AI (01) inside a GS1-128, the 13-digit value is padded with a leading zero to get to 14. So the EAN-13 9506000134352 becomes (01)09506000134352. The parser handles this silently: the GTIN value you see in the breakdown is always the 14-digit canonical form.

Does this tool validate check digits inside AI values?

Yes, for the AIs that carry one: GTIN (01 and 02) runs the GS1 mod-10 algorithm, SSCC (00) runs it on the 18-digit form, and GLN-bearing AIs (410-417) run it on the 13-digit form. A wrong check digit shows up in the breakdown card as a soft red error with the expected vs actual digit. Other AIs get length and character-set validation only.

Is my pasted data sent to a server?

No. Every AI is parsed in your browser. There's no API call, no analytics payload carrying your input, no server-side processing at all. Open the devtools network tab while you type if you want to see for yourself: nothing fires. This matters if you're using the tool on production data or anything internal that shouldn't leave your network.

By The eancheck teamPublished

Questions or corrections? Email the eancheck team.