GS1 & Logistics · server-powered
GS1 DotCode generator.
DotCode builds a symbol from separate round dots instead of solid square cells, which is exactly what continuous inkjet and laser coders can place cleanly while a production line runs at full speed. The GS1 flavor carries application identifier data, and its best known job is printing unique pack codes for EU tobacco track and trace. Type parenthesized AIs below and the watermarked preview updates as you go.
GS1 AIs in DotCode, high-speed printing lines.
Standards-based quiet zones are always on. For production packaging, verify a printed sample with a barcode verifier.
Preview
Sample: type to make it yours- Renders on our servers, the one Plume tool that does.
- We keep the code type and content length, never what you encode.
- Free SVG vector + up to 600 DPI PNG, commercial use allowed.
- Full details in the privacy policy.
Valid GS1 DotCode input
Data is entered as a GS1 element string with each application identifier in parentheses: (01)09521234543213 for the GTIN, optionally followed by pairs such as (17)270630 for expiry, (10) for lot, and (21) for serial. A lint pass runs before rendering and speaks in plain words: GTIN check digits are recalculated, date AIs must contain a real month, fixed length fields must be exact, and an AI missing from the GS1 table is refused.
Text values are limited to CSET 82, the GS1 character set, so a space inside a lot or serial is rejected. FNC1 separators after variable length fields are inserted for you, which is why you type brackets rather than control characters.
Working sample: (01)09521234543213 The sample is AI (01) holding 09521234543213, a GS1 test GTIN with a correct check digit.
Where GS1 DotCode is used
- Unique identifiers on cigarette and tobacco packs required by the EU Tobacco Products Directive, applied at line speed
- Date, lot, and serial coding on cans, cartons, and film where inkjet cannot form crisp contiguous squares
- Serialization on fast filling lines where the code changes for every unit and the printer never pauses
Common errors and how to fix them
- AIs must start with '('
- Raw digit strings are ambiguous, so this tool only accepts bracketed syntax. Write 0109521234543213 as (01)09521234543213 and give each further AI its own parentheses.
- AI 17: Invalid month
- Date AIs use YYMMDD, so (17)251332 fails because 13 is not a month. Keep the month between 01 and 12; a day of 00 is permitted when only month precision exists.
- AI 23: Unrecognised AI
- Only identifiers in the current GS1 AI table encode. Two, three, and four digit AIs all exist, so the digits right after the opening bracket must match a real entry; check the GS1 list for the field you need.
- AI 99: Invalid CSET 82 character
- Company internal AIs 90 to 99 accept CSET 82, which covers digits, letters, and most punctuation but not spaces. Remove the space or swap it for a character inside the set.
Size and printing
DotCode sizes itself and chooses its own dot grid, so the bar height and text settings do not apply to this symbology; the row count plus column count always comes out odd, a quirk of the specification. Your levers are module width in mm, which sets the dot pitch, and export DPI up to 600 so the round dots keep smooth edges. DotCode's rectangle is unusually flexible and can stretch wide and shallow, which is how it matches the fixed nozzle rows of industrial print heads. For proofs, the free SVG scales losslessly into whatever software will finally drive the coder.
GS1 DotCode questions
What is DotCode used for?
Its flagship application is tobacco traceability in the EU, where every pack receives a unique DotCode at production speed. More broadly it fits any line where continuous inkjet or laser marking applies variable data too fast for tidy square symbols.
Why use DotCode instead of Data Matrix?
Data Matrix needs contiguous square modules, which distort when a fast moving product passes an inkjet head. DotCode was designed around isolated dots that tolerate placement error. It stays readable at line speeds where square module symbols degrade, though on an ordinary label printer Data Matrix is usually the better choice.
Can a normal barcode scanner read DotCode?
Only camera based 2D imagers can, and many ship with DotCode switched off by default. Enable it in the scanner's symbology settings before rollout; laser scanners will never read it.
What data goes into a GS1 DotCode?
Chained GS1 application identifiers: (01) GTIN, (17) expiry, (10) lot, (21) serial, plus any other pair your process needs. The generator lints the syntax first, so a bad date or check digit never reaches the printer.