Free GS1 Barcode Decoder
Paste the raw string from a GS1 DataMatrix, GS1-128, or GS1 QR Code scan. This tool splits it into Application Identifiers, validates check digits, and expands the dates into plain English.
Paste either the bracketed form or the raw scanner output. If your scan contains an invisible
FNC1 / group separator it is handled automatically — or type <GS> where the separator belongs.
Try an example
| AI | Meaning | Raw value | Decoded |
|---|
Private by design: decoding happens entirely in your browser. Nothing you paste is uploaded, logged, or stored — which matters, because GS1 element strings routinely carry batch, lot, and serial numbers tied to real inventory.
How a GS1 Barcode Is Structured
A standard EAN-13 on a grocery item encodes one thing: a product number. A GS1 barcode — a GS1 DataMatrix on a medicine carton, a GS1-128 on a pallet label, a GS1 QR Code on new packaging — encodes several fields packed end to end. Because they run together with no punctuation, each field is introduced by a short numeric prefix called an Application Identifier (AI) that says what the next chunk of data means.
Take this element string:
(01)09506000134352(17)261231(10)ABC123
- (01) — the next 14 digits are a GTIN, the product's global trade item number.
- (17) — the next 6 digits are a use-by or expiry date in
YYMMDDformat. - (10) — the rest, up to 20 characters, is the batch or lot number.
The brackets are a reading convention for humans. They are never encoded in the barcode itself, which
is why a scanner hands you 01095060001343521726123110ABC123 instead.
Fixed-length and variable-length fields
The decoder can split that run of characters because GS1 defines a small, permanently fixed set of AIs whose total length is predefined. AI 01 is always 14 digits of data; AI 17 is always 6. Nothing has to mark where they end.
Every other AI is variable length, so it must be terminated by a separator when another field follows it. That separator is FNC1, which scanners normally deliver as ASCII 29, the Group Separator. It is invisible in most text editors, and its absence is the single most common reason a GS1 string decodes into nonsense: a batch number simply swallows the serial number that follows it.
A trap worth knowing: some AIs have a fixed data format but are not in the predefined-length table. AI 402 (GSIN) is always 17 digits, yet it still requires a separator, because the predefined-length table was fixed when AIs were first introduced and has never been extended.
Reading the dates
GS1 dates are YYMMDD with a two-digit year, interpreted on a rolling window that runs roughly
49 years back and 50 years forward from today. A day of 00 historically meant "the last day of
this month". GS1 withdrew that allowance for regulated healthcare products from 1 January 2025, so new
pharmaceutical packs carry a real day — but older stock still in circulation may not. This decoder expands
00 to the month end and flags it.
Measures with an implied decimal point
Weight, dimension, and price AIs are four digits long, and the fourth digit is not part of the identifier —
it is the decimal position. AI 3103 with the value 000123 is not 123 kg; it is
0.123 kg. The same six digits under AI 3100 would be 123 kg. Getting this
wrong by a factor of a thousand is a classic goods-in error.
When You Would Use This
Goods-in and warehouse checks
A pallet label will not scan into your WMS. Decode the string by hand to see whether the SSCC check digit is wrong, a separator is missing, or the label simply carries an AI your system does not map.
Pharmacy and healthcare
Confirm which GTIN, batch, expiry, and serial a pack actually carries under the EU Falsified Medicines Directive or US DSCSA, without pasting patient-adjacent identifiers into someone else's web service.
Packaging and artwork proofing
Before a print run, verify the symbol your artwork produced encodes the fields you intended — and that the GTIN check digit matches the number on the spec sheet.
Integration and debugging
When a supplier feed and a scanner disagree, decode the raw string to establish which side is misinterpreting the element string before you open a ticket.
Related Tools & Guides
Frequently Asked Questions
What is a GS1 Application Identifier?
An Application Identifier (AI) is a 2- to 4-digit prefix that tells you what the data immediately after it means. In the element string (01)09506000134352(17)261231, AI 01 marks a GTIN and AI 17 marks a use-by date. Without the AI prefixes a GS1 barcode is just an undifferentiated run of digits.
Why does my scanner output look like one long number with no brackets?
The brackets are a human-readable convention only — they are never encoded in the barcode. A scanner returns the raw concatenated element string. This tool accepts either form, so you can paste the raw scan directly.
What is the invisible character between fields in my scan?
It is the FNC1 separator, which most scanners return as ASCII 29 (the Group Separator, GS). It terminates a variable-length field such as a batch number. Fixed-length fields like AI 01 and AI 17 need no separator because their length is predefined. You can also type <GS> where the separator belongs.
Which Application Identifiers does this decoder support?
It covers the AIs used in most retail, healthcare, and logistics barcodes: identification keys (00, 01, 02, 410-417), dates (11, 12, 13, 15, 16, 17), batch and serial data (10, 21, 22, 240, 241, 250, 251, 253, 254), counts and measures (30, 37, 310n-336n), amounts (390n-393n), logistics and origin (400-403, 420-427), and 7003, 8017, 8018, 8200. An AI outside that set is listed as unrecognised rather than guessed at.
Does the decoder check whether my GTIN is valid?
It recalculates the GS1 mod-10 check digit for GTIN, SSCC, and GLN fields and tells you the expected digit when it does not match. That catches transcription errors, but it cannot confirm the number is registered to a real product — only the GS1 registry or the brand owner can do that.
What does a day of "00" in an expiry date mean?
Historically, a day of 00 in a YYMMDD date meant the last day of that month. GS1 withdrew that allowance for regulated healthcare products from 1 January 2025 under GSCN 21-040, so new healthcare packs must carry a real day. This decoder still expands 00 to the month end and flags it, because older stock remains in circulation.
Is my barcode data sent to a server?
No. The decoder runs entirely in your browser as plain JavaScript, and nothing you paste leaves your device. That matters here, because GS1 element strings routinely contain batch, lot, and serial numbers tied to real inventory and, in healthcare, to individual saleable packs.
Can it decode a GS1 Digital Link URL?
No — a Digital Link is a web URL such as https://example.com/01/09506000134352/10/ABC, which is a different encoding from an element string. This tool rejects it cleanly rather than mis-parsing it. Use the GS1 Digital Link QR Generator to build one.
Scan the Code, Then Decode It Here
The Scan & Generate app reads GS1 DataMatrix, GS1-128, EAN-13, UPC-A and nine other formats — 13 in all, and shows you the exact raw payload — paste it straight into this decoder.