Upload or paste a GS1 barcode image
Click to browse, drop an image here, or paste one from the clipboard with Ctrl + V
A free online GS1 barcode scanner powered by Dynamsoft Barcode Reader — read GS1 symbols and parse their application identifiers
Upload or paste a GS1 barcode image
Click to browse, drop an image here, or paste one from the clipboard with Ctrl + V
This tool decodes a GS1 barcode with your camera or from an
uploaded image — DataBar, GS1 DataMatrix, GS1 QR Code, GS1-128, GS1 Composite or ITF-14 —
and splits the element string with the GS1 application-identifier table. Every AI comes
back as a named field: GTIN with its mod-10 check digit verified, expiry date normalised
from YYMMDD, batch, serial, weight and price. Decoding runs in the browser,
not on a server.
The GS1 barcode generator's Retail 2D (Sunrise 2027) preset prints one pack carrying two symbols: a GS1 DataMatrix at the till and the legacy EAN-13 beside it. The DataMatrix holds four AIs — GTIN, expiry, batch and serial. Here is what this page returns for that label, trimmed to the fields that matter:
{
"elementString": "01009506001375621728081310LOT-32763|21SN19531256",
"count": 4,
"hri": "(01)00950600137562(17)280813(10)LOT-32763(21)SN19531256",
"digitalLink": "https://id.gs1.org/01/00950600137562/10/LOT-32763/21/SN19531256?17=280813",
"gtin": { "ai": "01", "value": "00950600137562", "verified": true },
"elements": [
{
"ai": "01",
"title": "GTIN",
"value": "00950600137562",
"variable": false,
"terminatedBy": "end",
"group": "Identification",
"display": "00950600137562",
"verified": true
}
]
}
| AI | Element | Display | Ends at |
|---|---|---|---|
| 01 | GTIN | 00950600137562 |
fixed-length, no separator |
| 17 | Expiration date | 2028-08-13 |
fixed-length, no separator |
| 10 | Batch / lot | LOT-32763 |
FNC1 |
| 21 | Serial number | SN19531256 |
end of payload |
Three things in that output are worth pointing at. The | in
elementString is the FNC1 separator: the page normalises the three forms a
decoder may print (byte 0x1D, the {GS} placeholder and
]C1) to one representation before parsing. verified: true is the
mod-10 check digit summed over the GTIN, not a claim about the product. And the Digital Link
is derived here — this page builds the URI, it does not resolve it.
Scan the EAN-13 instead and you get the same GTIN from a second symbol. That is the packaging pattern the 2027 transition creates, so the page reports the two reads as one product rather than two: the notice above the result cards names the duplicated GTIN. The companion generator can reproduce the same label as a PNG if you want a fixture of your own.
Now send the same payload with the separator removed — the behaviour of decoders that return a flat string instead of preserving FNC1. AI 10 is variable-length, so it reads to the end of the string and swallows the serial number:
{
"elements": [
{ "ai": "01", "value": "00950600137562", "verified": true },
{ "ai": "17", "value": "280813", "display": "2028-08-13" },
{ "ai": "10", "value": "LOT-3276321SN1", "variable": true, "terminatedBy": "end" },
{ "ai": "95", "value": "31256", "group": "Internal" }
],
"warnings": [
"The decoder returned no FNC1 separators, so the length of AI 10 was taken from the AI table rather than from a separator.",
"AI 10 read 21 characters, more than the 20 this AI allows, so the value was re-split: AI 10 = \"LOT-3276321SN1\" and the remainder parsed as AI 95."
]
}
LOT-3276321SN1 looks like a plausible batch number. It is wrong, and the AI table
proves it: AI 10 allows at most 20 characters and this reading used 21. The parser reports
the violation, re-splits at the longest head whose remainder still parses, and says that it
did — which is the difference between a wrong answer and a wrong answer you can see.
| Capability | This tool |
|---|---|
| GS1 DataBar family, GS1 DataMatrix, GS1 QR Code, GS1-128, GS1 Composite, ITF-14 | Decoded. Formats: GS1 symbologies narrows the reader to the formats that
can carry an element string; All symbologies widens it to
BF_ALL. |
| EAN-13 / ITF-14 carrying a bare GTIN | Read as AI 01, and the inference is disclosed in the result rather than applied silently. |
| GTIN, SSCC and GLN check digits | Verified with mod-10; a failure states what the correct digit would be. |
Dates and the 3Ndd measurement families |
Normalised — day 00 becomes the last day of that month, and the
decimal position carried by the AI is applied. |
| HRI, raw element string with FNC1 marked, GS1 Digital Link | All three rendered, and the whole set exported as JSON. |
| Resolving a Digital Link, or fetching product data | Not offered. The URI is built from the payload; nothing is queried. |
| Proving a label is authentic or uncloned | Not offered. Check digits catch transcription errors, not counterfeits. |
| Multi-page PDF or TIFF input | Not in this tool — it takes one image. Use the Barcode Scanner for page-by-page documents. |
| Large files and images | Images wider than 4000 px are scaled down for decoding rather than uploaded or sent to a server; the original stays in the tab for the preview. |
| Camera input | Needs a secure context (HTTPS or localhost) and camera permission. Upload, drag & drop and clipboard paste need neither. |
| Privacy and network | The image is decoded on the device and is not uploaded. The page does fetch the SDK bundle, the licence and demo analytics over the network. |
This page activates a Codepool licence bound to dynamsoft.com, so there is
no account, no key and nothing to install. Point a camera at a label, or drop in an
image.
"Free" describes the hosted demo, not the source code. Cloned and served elsewhere, the same files need your own licence before the SDK will activate.
warnings array: a re-split is always reported, along with the
length rule that triggered it.