GS1 Barcode Generator
Build a GS1-128 symbol from Application Identifiers, with FNC1 separators placed correctly and SSCC-18 and GTIN-14 check digits calculated. Everything runs in your browser.
You want a retail or internal barcode
EAN-13, EAN-8, UPC-A, ITF-14, plain Code 128 or Code 39, in bulk, with a print sheet.
Use the barcode generator insteadYou want a GS1-128 logistics barcode
An SSCC, GTIN-14, batch, expiry or purchase order number encoded as AI data on a carton or pallet label.
You are on the right pageYou need a GTIN or a company prefix
This page does not issue either. Only a GS1 member organisation allocates a GS1 Company Prefix, and your GTINs are built on it.
Contact your national GS1 officePrinting an invented GTIN or SSCC on goods that leave your building risks colliding with a number another company legitimately holds. This tool renders numbers you already have.
Build a GS1-128 Element String
Pick an Application Identifier, type its value, and the element string, the FNC1 placement and the symbol update together. Add as many fields as the label carries.
Fields marked are required. Everything else is optional and refines the result.
The X dimension is the width of the narrowest bar. It sets the physical size of the whole symbol and is the number your trading partner specification will quote.
— — Check digit calculator: SSCC-18 and GTIN-14
Enter the key without its final digit. The check digit is arithmetic on the digits you supply, so it never invents an identifier for you.
Validator: parse an element string back
Paste what a scanner returned, or what a partner sent you, and see it split into labelled fields. Bracket notation and a raw string with separator markers are both accepted.
Write a separator as a pipe character, as <FNC1>, or as <GS>. A pasted bracket notation string is read as if separators sit wherever the rules require them.
What the builder checks before it draws a symbol
| Check | Applies to | What happens if it fails |
|---|---|---|
| Data length | Every AI | Named with the permitted length from the GS1 format string. |
| Digits only | Numeric AIs | The offending character is quoted back to you. |
| Character set 82 | Alphanumeric AIs | Rejected; space and lower case punctuation outside the set are named. |
| Modulo 10 check digit | SSCC, GTIN, GLN, GSIN | Flagged with the digit that should have been there. |
| Date format | AI 11, 15, 17 | Rejected unless YYMMDD, or YYMM00 for an unspecified day. |
| Duplicate AI | Every AI | Flagged, because a scanner cannot tell which value wins. |
| FNC1 placement | Variable length AIs | Inserted automatically and shown in the encoded data line. |
The Barcode, the Element String and the GTIN
Most GS1 confusion starts here. A supplier asks for a barcode, a marketplace asks for a GTIN, and a 3PL asks for an SSCC on the label. Those are three layers, not three synonyms.
The identifier
A GTIN names a trade item. An SSCC names one physical logistics unit. Both are numbers that mean something because GS1 allocated the prefix inside them.
The element string
Data assembled from Application Identifiers. Each AI declares what the next value means and how long it may be, so one string can carry several attributes.
The symbol
The printed bars. GS1-128 is one carrier for AI data. GS1 DataMatrix and GS1 DataBar carry the same element strings in different shapes.
| Layer | Example | Who decides it | Changes when | Lives where |
|---|---|---|---|---|
| Identifier | GTIN 09501101020917 | You, inside your GS1 prefix | The product changes | Your item master |
| Identifier | SSCC 395011010000004185 | Whoever builds the unit | Every pallet or carton | The despatch record |
| Element string | (01)…(10)…(17)… | The label specification | Attributes are added | The label artwork |
| Symbol | GS1-128 bars | The scanning environment | Space or data volume changes | The printed label |
| Message | Despatch advice | The trading relationship | The process changes | Your systems |
Why the SSCC matters more than people expect
The SSCC is the link between the physical pallet and the electronic despatch advice. Scan it at receiving and the whole content list is already known, without opening anything.
Fixed Length Versus Variable Length Application Identifiers
This single rule causes more unusable logistics labels than every print quality problem combined, and the symbol looks perfectly healthy while it is wrong.
Predefined length AI
The decoder already knows how many characters to take. The next AI may follow immediately, with no separator.
(01)09501101020917(17)270131 Fourteen digits, then six. Unambiguous.
Variable length AI
The decoder cannot know where the value stops. An FNC1 separator must terminate it, unless it is the last field.
(10)US-4471 ‹FNC1› (17)270131 Without the separator the batch swallows the expiry.
| Situation | Separator needed | Why | Symptom when it is wrong |
|---|---|---|---|
| Predefined length AI, another field follows | No | Length is known from the AI itself | An unexpected separator becomes part of the next AI |
| Predefined length AI, last field | No | Nothing follows to delimit | Trailing separator confuses strict decoders |
| Variable length AI, another field follows | Yes | The value has no fixed end | The next AI is absorbed into this value |
| Variable length AI, last field | No | End of data terminates it | A trailing separator adds an empty field |
| Two variable length AIs in a row | Yes, after the first | Both ends are otherwise undefined | One long meaningless value |
| Fixed format AI outside the predefined list | Yes | Predefined length is a published list, not a guess | Silent data corruption from AI 402 and AI 422 |
Fixed format is not the same as predefined length
AI 422 always carries exactly three digits, yet GS1 reference data still marks it as requiring a separator. Predefined length is a published list, and 422 is not on it.
The predefined length AI prefixes
- Two digit prefixes 00, 01, 02, 03 and 04
- Two digit prefixes 11 through 20
- Two digit prefixes 31 through 36
- Two digit prefix 41
- Everything else requires an FNC1 separator when a field follows
Derived from the separator flag published for every AI in the GS1 Application Identifiers reference data.
Application Identifiers This Tool Encodes
Format strings read as the AI length plus the data length. N means digits, X means character set 82, and two dots mark a variable length up to that maximum.
| AI | Data title | Meaning | Format | Separator required | Check digit |
|---|---|---|---|---|---|
| 00 | SSCC | Serial Shipping Container Code | N2+N18 | No | Yes |
| 01 | GTIN | Global Trade Item Number | N2+N14 | No | Yes |
| 02 | CONTENT | GTIN of the contained trade items | N2+N14 | No | Yes |
| 10 | BATCH/LOT | Batch or lot number | N2+X..20 | Yes | No |
| 11 | PROD DATE | Production date, YYMMDD | N2+N6 | No | No |
| 15 | BEST BEFORE | Best before date, YYMMDD | N2+N6 | No | No |
| 17 | USE BY OR EXPIRY | Expiration date, YYMMDD | N2+N6 | No | No |
| 21 | SERIAL | Serial number | N2+X..20 | Yes | No |
| 30 | VAR. COUNT | Variable count of items | N2+N..8 | Yes | No |
| 310n | NET WEIGHT (kg) | Net weight of a variable measure trade item | N4+N6 | No | No |
| 330n | GROSS WEIGHT (kg) | Logistic weight of the unit | N4+N6 | No | No |
| 37 | COUNT | Count of trade items in a logistic unit | N2+N..8 | Yes | No |
| 400 | ORDER NUMBER | Customer purchase order number | N3+X..30 | Yes | No |
| 402 | GSIN | Global Shipment Identification Number | N3+N17 | Yes | Yes |
| 403 | ROUTE | Routing code | N3+X..30 | Yes | No |
| 410 | SHIP TO LOC | Ship to or deliver to GLN | N3+N13 | No | Yes |
| 422 | ORIGIN | Country of origin of a trade item | N3+N3 | Yes | No |
Source: GS1 Application Identifiers reference data, ref.gs1.org/ai, vocabulary version 1.2, last modified 26 January 2026. Cross-checked against the GS1 Barcode Syntax Dictionary release 2026-01-27. Data as at 14 August 2026. Any AI we could not source is simply absent from this tool.
On the trailing n in 310n and 330n
The fourth digit is the number of decimal places in the six digit value. AI 3102 with 048600 reads as 486.00 kilograms; AI 3103 with 048600 reads as 48.600 kilograms.
How the Serial Shipping Container Code Is Constructed
One SSCC identifies one physical unit: this pallet, this carton, not this product. Build a second identical pallet tomorrow and it gets its own SSCC.
Extension digit
One digit, 0 to 9, that you choose. It exists purely to widen the serial capacity of a given company prefix.
Company prefix
Issued to your business by a GS1 member organisation. Its length varies, and that length is what constrains everything after it.
Serial reference
Allocated by you, filling whatever digits remain. Never reuse one within the period your trading partners keep records.
Check digit
Calculated from the seventeen digits in front of it. It catches a single mistyped or misread digit before it reaches a system.
| Component | Digits | Who supplies it | In the worked example |
|---|---|---|---|
| Extension digit | 1 | You | 3 |
| GS1 Company Prefix | Varies | GS1 member organisation | 9501101 (7 digits, illustrative) |
| Serial reference | 16 minus prefix length | You | 000000418 (9 digits) |
| Check digit | 1 | Arithmetic | 5 |
| Total | 18 | — | 395011010000004185 |
Step 1
multiply each digit by 3, 1, 3, 1 … from the right The rightmost digit you entered is weighted by 3.
Step 2
sum = Σ (digit × weight) Add every weighted result together.
Step 3
check = next multiple of 10 ≥ sum, minus sum Same arithmetic for SSCC, GTIN, GLN and GSIN.
Method as published by GS1: How to calculate a check digit manually, retrieved 14 August 2026.
The Indicator Digit, and What It Does Not Mean
A GTIN-14 is not a different product number. It is the same product expressed at a different packaging level, and the leading digit is what says which level.
| Step | What you do | Worked figures | Common mistake |
|---|---|---|---|
| 1 | Start from the GTIN of the base unit | 09501101020917 | Starting from a GTIN-14 already |
| 2 | Drop its check digit | 950110102091 | Keeping the old check digit |
| 3 | Put the indicator digit in front | 1 950110102091 | Appending it instead |
| 4 | Recalculate the check digit over 13 digits | 4 | Reusing the base unit check digit |
| 5 | Read the result as the case GTIN | 19501101020914 | Treating it as a new product |
What the indicator distinguishes
- An inner pack from the outer case of the same item
- A case of six from a case of twelve
- Indicator 0 is reserved for the base unit itself
- Indicator 9 marks a variable measure trade item
What it does not do
- It does not encode how many units are inside
- It does not survive a change of case quantity
- It is not a sequence number for your cases
- It is not interchangeable between trading partners
Two different case quantities of the same item are two different GTIN-14 values. Reusing one indicator for both is a data quality fault that surfaces at a customer, not at your dock.
The Logistics Label on a Carton or Pallet
A GS1-128 rarely travels alone. It sits on a label with human readable text above it, usually stacked in bands, and a 3PL scans it at the point the unit changes hands.
Top band
Free text for people: the shipper, the consignee, the destination. No barcode, and nothing a scanner depends on.
Middle band
Content data as bars: the GTIN-14, count, batch, expiry. What the receiving system needs to book the goods in.
Bottom band
The SSCC, alone and largest. It is the one value that identifies this specific physical unit and nothing else.
| Who asks for it | What they scan | What it unlocks | What breaks without it |
|---|---|---|---|
| 3PL inbound team | SSCC at the dock | Receipt matched to the despatch advice | Manual carton counting on the dock |
| Marketplace fulfilment centre | GTIN-14 and count | Automated putaway of the case | Rework fees and inbound delays |
| Freight forwarder | SSCC and routing code | Unit tracked across legs | Visibility gaps between handovers |
| Retailer distribution centre | SSCC on the pallet | Cross docking without opening | Full pallet break down at receipt |
| Your own warehouse | Batch and expiry | First expiry first out picking | Short dated stock found too late |
| Recall coordinator | Batch on the case | Affected units traced by lot | A recall widened to whole SKUs |
We do not claim conformance to any label specification
Symbol placement, size, quiet zones, band layout and mandatory AIs are set by your trading partner. Check the output of this tool against the document they published.
A Pallet Despatched From a US Warehouse
Ninety six cases of one item leave an Ontario, California facility for a Texas distribution centre. The pallet needs one label carrying an SSCC and the case level detail.
| Field | AI | Value entered | Predefined length | Separator after it |
|---|---|---|---|---|
| SSCC of the pallet | 00 | 395011010000004185 | Yes | No |
| Case GTIN-14 | 01 | 19501101020914 | Yes | No |
| Cases on the pallet | 37 | 96 | No | Yes, a field follows |
| Gross weight, kg | 3302 | 048600 | Yes | No |
| Expiry date | 17 | 270131 | Yes | No |
| Batch or lot | 10 | US-4471 | No | No, it is last |
(00)395011010000004185(01)19501101020914(37)96(3302)048600(17)270131(10)US-4471 0039501101000000418501195011010209143796 ‹FNC1› 33020486001727013110US-4471 Reading the example back
- AI 00 and AI 01 are predefined length, so they run straight into each other
- AI 37 is variable length and a field follows, so a separator closes it
- AI 3302 is predefined length, so no separator precedes AI 17
- AI 10 is variable length but last, so no trailing separator is added
- Order the batch last and the string carries one separator instead of two
The company prefix and serial reference here are illustrative. Substitute the prefix GS1 issued to your business before printing anything.
What Goes Wrong, and How the Validator Says So
A generic invalid message is useless when a label run is waiting. Every failure below is reported with the AI, the value and the rule that was broken.
| Fault | What you typed | What the validator says | Consequence if it shipped |
|---|---|---|---|
| Missing separator | (10)US-4471(17)270131 run together | Batch value absorbed the following AI | Expiry lost, batch unusable for recall |
| Wrong check digit | SSCC ending 4 | Check digit should be 5 | Rejected at a partner receiving system |
| Short GTIN | 13 digits under AI 01 | AI 01 needs exactly 14 digits | Symbol scans, data fails validation |
| Space in a batch | MY 4471 | Space is not in character set 82 | Encoder or scanner behaviour varies |
| Impossible date | (17)270230 | Not a real date in YYMMDD | Downstream date parsing fails |
| Duplicate AI | Two AI 10 fields | AI 10 appears more than once | Receiver takes whichever it saw first |
| Unknown AI | (99)ABC | AI 99 is not in the sourced table | Data silently ignored downstream |
The failure that is hardest to catch
A missing separator produces a symbol that scans first time and looks correct on the label. The fault only appears when a receiving system parses the data and finds nonsense.
X Dimension, Quiet Zones and Test Prints
Size is set by the narrowest bar, not by the label. Get that number from your trading partner specification rather than from what looks right on screen.
Before the artwork is signed off
- Take the X dimension from the published specification
- Leave clear space either side of the symbol
- Keep dark bars on a light matt background
- Never scale the symbol non proportionally
- Regenerate rather than stretch an existing image
Before a production run
- Test print at the exact intended size
- Scan with the equipment used on your floor
- Scan again once applied to the real surface
- Confirm the decoded string matches field by field
- Have a verifier check a sample if a partner requires it
SVG is offered because bar edges stay sharp at any size and label design software imports it directly. A resampled bitmap loses the crisp transitions a scanner relies on.
Long element strings get physically wide
The six field pallet example runs to 42 symbol characters, about 242 mm at an X dimension of 0.5 mm. That is why logistics labels usually split the data across two stacked symbols.
Everything happens in your browser
The AI table, the check digit arithmetic, the Code 128 encoding and the SVG output all run locally. No order number, batch code or customer reference is sent anywhere.
What This Tool Deliberately Will Not Do
A barcode tool that oversteps is worse than one that stops. These are the boundaries, and each one exists because crossing it causes real damage.
It does not issue numbers
No GS1 Company Prefix, no GTIN, no GLN. Those come from a GS1 member organisation, and only they can allocate them to your business.
It does not certify labels
Nothing here confirms your label meets a retailer, carrier or marketplace specification. Only that document, and their testing, can say so.
It does not quote GS1 fees
Membership and prefix pricing varies by country and changes over time. Ask your national GS1 office rather than trusting a figure found online.
What it does do
- Assembles an element string from a sourced Application Identifier table
- Places FNC1 separators according to the published separator flag
- Encodes Code 128 with FNC1 in the first position and a modulo 103 check character
- Calculates and verifies modulo 10 check digits on SSCC and GTIN keys
- Parses a pasted element string back into labelled fields
- Renders to SVG at an X dimension you set, with a print view
Where an Application Identifier format could not be sourced to GS1 reference data, it was left out of this tool rather than guessed at.
Number the Goods, Then Label and Ship Them
A GS1-128 sits near the end of a chain that starts with how you code your items and ends with what leaves the dock.
- Generate retail and internal barcodes: EAN, UPC, ITF-14, Code 128
- Build an internal SKU scheme before you print anything
- Create the shipping label the carton travels under
- Draft the packing list that matches the pallet
- Work out cases per pallet before allocating an SSCC
- Browse every free Locad logistics tool
- Locad warehousing with scan based inventory
- Ecommerce fulfilment with Locad
GS1 Barcode Generator Questions
Need SSCC Labelled Inbound?
Talk to Locad about warehousing and fulfilment where inbound labelling is agreed with suppliers up front, and every receipt, putaway, pick and pack is scanned.