GS1 Digital Link QR Generator
A QR code with a wrong GTIN scans perfectly — and fails at the till, after it is printed on ten thousand boxes. This generator refuses to make that code: the GTIN is validated first, qualifiers go in the order the standard mandates, reserved characters are encoded by the standard's own table, and every generated URI is verified against the same parser that powers our Digital Link checker.
🔒 Your data never leaves your browser — validation, URI construction and QR rendering all run on your machine.
Batch
One GTIN per line. Conformant ones are zipped as SVGs; refused ones are listed with the reason — nothing is dropped silently. Batch encodes the GTIN only: the qualifier fields above are not applied here, deliberately — one serial number stamped onto many items would defeat serialisation.
Sunrise 2027, stated honestly
Sunrise 2027 is an industry capability milestone, not a legal mandate: the initiative "lays out a plan to help ensure 2D barcodes will be scanned and processed at any retail POS by the end of 2027". The obligation direction is retailer POS capability; for brands, adding a 2D code is preparation, not compliance. (GS1 US)
During the transition, GS1 US describes dual marking as a mandatory 1D barcode plus an optional 2D barcode. From 2027 onward the on-pack options become a 1D or a 2D barcode, "depending on trading partner capabilities" — 1D does not get switched off. (GS1 US)
How big must it be printed?
The 2D-at-POS implementation guideline (Release 1.1.0, December 2025) requires a quiet zone of four times the X-dimension on all four sides of a QR code, and confirms the retail 2D carriers are QR Code carrying a GS1 Digital Link URI, or GS1 DataMatrix. (GS1 guideline) GS1 UK publishes the permitted X-dimension range for point-of-sale — 0.396 mm to 0.99 mm per module — and the sizing formula (modules + 8) × X. The generator applies that formula to your actual symbol and shows the millimetre range with every code.
GS1 publishes no mandated QR error-correction level: the guideline lists L/M/Q/H and says to choose per use case. The M default in this generator is an engineering choice, balancing packaging wear against symbol density. (GS1 guideline)
Why refusal is a feature
Online QR generators happily encode anything — a GTIN with a wrong check digit, a batch number with a space in it, qualifiers in an order the standard forbids. The result scans (QR error correction guarantees that) and then fails wherever the data is actually used. Everything this tool refuses to generate is something that would have been printed and shipped before anyone noticed. The checker exists for auditing existing URIs; this generator exists so new ones never need the audit.
Everything this tool checks and discloses (8 rules)
QRG-E01GTIN failed validation — no code generated
The GTIN did not pass the full validation engine (check digit, length, cleaning). A QR code with a wrong GTIN scans fine and looks fine — and fails at the till, after it has been printed on packaging. This generator refuses to produce it; the underlying findings say exactly what is wrong.
Fix: Fix the GTIN first — the check-digit calculator completes a payload, the validator explains a failing code.
Source: Own engineering rule. The generator refuses to emit a non-conformant code rather than warning after the fact — a printed QR cannot be patched.
QRG-E02Qualifier value outside the standard character set or length
Batch/lot (10), serial (21) and CPV (22) values are limited to at most 20 characters from the 82-character XCHAR set (digits, letters, and " - . _ ! % & + , / * ( ) ' ; : < > = ?). Anything else — spaces, €, emoji, control characters — cannot be represented in a conformant GS1 Digital Link URI at all.
Fix: Use the value exactly as it appears in your GS1 element strings; if it contains a space, it was never a valid AI value to begin with.
Source: https://ref.gs1.org/standards/digital-link/uri-syntax/
QRG-E03Domain is not a plain http(s) origin
The resolver domain must be a bare origin like https://id.gs1.org or https://brand.example — no path, no query, no spaces. Path prefixes are technically allowed by the standard but interact badly with key detection in real resolvers, so this generator keeps the stem to an origin.
Fix: Enter just the scheme and host. The GS1 path (/01/…) is appended automatically.
Source: Own engineering rule. The generator refuses to emit a non-conformant code rather than warning after the fact — a printed QR cannot be patched.
QRG-W01Restricted-range GTIN — the code will not resolve publicly
The GTIN is valid arithmetic but sits in a restricted range (in-store codes 02/04/2xx, coupons, ISSN/ISBN handled elsewhere). A Digital Link QR for it can be generated and will scan, but public resolvers and retail POS systems outside the issuing store will not know what it is.
Source: Own engineering rule. The generator refuses to emit a non-conformant code rather than warning after the fact — a printed QR cannot be patched.
QRG-W02http:// stem — use https
The canonical resolver and the examples in the URI syntax standard use https. An http stem works mechanically but downgrades every scan to an insecure redirect, and some mobile scanners refuse it.
Fix: Change the domain to https://.
Source: https://ref.gs1.org/standards/digital-link/uri-syntax/
QRG-W03Long URI pushes the QR above version 12
The data no longer fits a compact symbol: at 69 modules and up (version 13+), the minimum conformant print size passes 30 mm per side at the smallest permitted X-dimension. Long serial numbers and long custom domains are the usual causes.
Fix: Shorten what you control — a shorter domain or dropping optional qualifiers shrinks the symbol a whole version step at a time.
QRG-I01Canonical vs brand domain
id.gs1.org is resolvable by the GS1 ecosystem out of the box; a brand domain gives you control of where scans land but needs your own resolver (or a link service) behind it. Both are conformant — the choice is operational, and the same GS1 path works on either.
Source: https://ref.gs1.org/standards/digital-link/uri-syntax/
QRG-I02Print size derives from module count × X-dimension
For retail POS scanning, GS1 UK states the permitted X-dimension range 0.396–0.990 mm and the sizing formula (modules + 8) × X — the 8 accounts for the mandatory 4-module quiet zone on each side. The error-correction level here defaults to M; that is this project's engineering choice (GS1 publishes no mandated level), balancing packaging wear against symbol density.
The GTIN itself is checked by the same 23-rule engine as the
GTIN validator — range warnings (in-store codes,
coupons) carry through to the result. Scope, honestly: GTIN (AI 01) primary keys only in this
first version; GS1 DataMatrix is a different carrier and deliberately out of scope. The same
engine powers generate_digital_link_qr in the yaktool MCP server.
Downloaded SVGs carry one XML comment naming where they came from
(<!-- Generated by yaktool.com -->). It is invisible, changes nothing about
how the code scans or prints, and PNG downloads do not carry it at all — but you should know
it is there, and you can delete the line in any text editor.