FreeGS1 Barcode Scanner

A free online GS1 barcode scanner powered by Dynamsoft Barcode Reader — read GS1 symbols and parse their application identifiers

Point the camera at a GS1 barcode.
Scan results

Initializing Dynamsoft Barcode Reader…

What this GS1 barcode scanner does

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.

Worked example: one Sunrise 2027 pack, decoded

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
    }
  ]
}
The four elements the same read produced, in payload order.
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.

GS1 Barcode Scanner showing two synthetic DataMatrix symbols and parsed GTIN, serial number, expiry date and batch
A real run in Chrome on 26 October 2026 with the bundled synthetic GS1 DataMatrix image. Both symbols decode to the same GTIN; the notice reports one product from two reads and the table exposes the AIs separately.

Failure case: the decoder drops FNC1

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.

Supported and not supported

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.

Use the tool, or build it into your app

Use the free hosted tool

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.

  • Two bundled sample labels if you have no barcode to hand
  • Exports the whole result set as JSON
  • No barcode? Build one in the GS1 generator first

Integrate it in your application

"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.

Limits worth knowing before you rely on it

Does a verified GTIN mean the product is genuine?
No. The mod-10 check digit catches mistyped and misread digits; it says nothing about whether the label was printed by the brand owner. Authenticity needs a Digital Link signature check or a track-and-trace lookup, neither of which this page performs.
Why did the batch number absorb my serial number?
The decoder did not return FNC1. AI 10 is variable-length, so without the separator it has no end. Check the warnings array: a re-split is always reported, along with the length rule that triggered it.
Why does a DataBar read include AI 01 when the symbol holds no AIs?
DataBar-14 and ITF-14 encode a bare GTIN, so the symbology itself is the announcement of AI 01. The page infers it only when the payload is nothing but a 12- to 14-digit number, and says so in the warnings.
Can I use this to test a POS rollout?
For single labels, yes. It reads one image at a time and does not record a pass/fail result per label, so a rollout test needs either the Barcode Scanner's benchmark mode with ground truth, or your own harness around the SDK.