Free Logistics Tool

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 instead

You 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 page

You 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 office

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

Fields
FNC1 separators
Symbol characters
Symbol width
Element string, human readable interpretation
Encoded data, with separators shown

    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

    CheckApplies toWhat happens if it fails
    Data lengthEvery AINamed with the permitted length from the GS1 format string.
    Digits onlyNumeric AIsThe offending character is quoted back to you.
    Character set 82Alphanumeric AIsRejected; space and lower case punctuation outside the set are named.
    Modulo 10 check digitSSCC, GTIN, GLN, GSINFlagged with the digit that should have been there.
    Date formatAI 11, 15, 17Rejected unless YYMMDD, or YYMM00 for an unspecified day.
    Duplicate AIEvery AIFlagged, because a scanner cannot tell which value wins.
    FNC1 placementVariable length AIsInserted 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.

    LayerExampleWho decides itChanges whenLives where
    IdentifierGTIN 09501101020917You, inside your GS1 prefixThe product changesYour item master
    IdentifierSSCC 395011010000004185Whoever builds the unitEvery pallet or cartonThe despatch record
    Element string(01)…(10)…(17)…The label specificationAttributes are addedThe label artwork
    SymbolGS1-128 barsThe scanning environmentSpace or data volume changesThe printed label
    MessageDespatch adviceThe trading relationshipThe process changesYour 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.

    SituationSeparator neededWhySymptom when it is wrong
    Predefined length AI, another field followsNoLength is known from the AI itselfAn unexpected separator becomes part of the next AI
    Predefined length AI, last fieldNoNothing follows to delimitTrailing separator confuses strict decoders
    Variable length AI, another field followsYesThe value has no fixed endThe next AI is absorbed into this value
    Variable length AI, last fieldNoEnd of data terminates itA trailing separator adds an empty field
    Two variable length AIs in a rowYes, after the firstBoth ends are otherwise undefinedOne long meaningless value
    Fixed format AI outside the predefined listYesPredefined length is a published list, not a guessSilent 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.

    AIData titleMeaningFormatSeparator requiredCheck digit
    00SSCCSerial Shipping Container CodeN2+N18NoYes
    01GTINGlobal Trade Item NumberN2+N14NoYes
    02CONTENTGTIN of the contained trade itemsN2+N14NoYes
    10BATCH/LOTBatch or lot numberN2+X..20YesNo
    11PROD DATEProduction date, YYMMDDN2+N6NoNo
    15BEST BEFOREBest before date, YYMMDDN2+N6NoNo
    17USE BY OR EXPIRYExpiration date, YYMMDDN2+N6NoNo
    21SERIALSerial numberN2+X..20YesNo
    30VAR. COUNTVariable count of itemsN2+N..8YesNo
    310nNET WEIGHT (kg)Net weight of a variable measure trade itemN4+N6NoNo
    330nGROSS WEIGHT (kg)Logistic weight of the unitN4+N6NoNo
    37COUNTCount of trade items in a logistic unitN2+N..8YesNo
    400ORDER NUMBERCustomer purchase order numberN3+X..30YesNo
    402GSINGlobal Shipment Identification NumberN3+N17YesYes
    403ROUTERouting codeN3+X..30YesNo
    410SHIP TO LOCShip to or deliver to GLNN3+N13NoYes
    422ORIGINCountry of origin of a trade itemN3+N3YesNo

    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.

    ComponentDigitsWho supplies itIn the worked example
    Extension digit1You3
    GS1 Company PrefixVariesGS1 member organisation9501101 (7 digits, illustrative)
    Serial reference16 minus prefix lengthYou000000418 (9 digits)
    Check digit1Arithmetic5
    Total18395011010000004185

    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.

    StepWhat you doWorked figuresCommon mistake
    1Start from the GTIN of the base unit09501101020917Starting from a GTIN-14 already
    2Drop its check digit950110102091Keeping the old check digit
    3Put the indicator digit in front1 950110102091Appending it instead
    4Recalculate the check digit over 13 digits4Reusing the base unit check digit
    5Read the result as the case GTIN19501101020914Treating 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 itWhat they scanWhat it unlocksWhat breaks without it
    3PL inbound teamSSCC at the dockReceipt matched to the despatch adviceManual carton counting on the dock
    Marketplace fulfilment centreGTIN-14 and countAutomated putaway of the caseRework fees and inbound delays
    Freight forwarderSSCC and routing codeUnit tracked across legsVisibility gaps between handovers
    Retailer distribution centreSSCC on the palletCross docking without openingFull pallet break down at receipt
    Your own warehouseBatch and expiryFirst expiry first out pickingShort dated stock found too late
    Recall coordinatorBatch on the caseAffected units traced by lotA 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.

    Logistics unit 1 pallet Ontario, CA to Dallas, TX
    Cases on it 96 Encoded with AI 37
    Gross weight 486.00 kg AI 3302, two decimal places
    Fields on the label 6 One FNC1 separator required
    FieldAIValue enteredPredefined lengthSeparator after it
    SSCC of the pallet00395011010000004185YesNo
    Case GTIN-140119501101020914YesNo
    Cases on the pallet3796NoYes, a field follows
    Gross weight, kg3302048600YesNo
    Expiry date17270131YesNo
    Batch or lot10US-4471NoNo, it is last
    Element string, human readable interpretation (00)395011010000004185(01)19501101020914(37)96(3302)048600(17)270131(10)US-4471
    Encoded data, ‹FNC1› marking the separator 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.

    FaultWhat you typedWhat the validator saysConsequence if it shipped
    Missing separator(10)US-4471(17)270131 run togetherBatch value absorbed the following AIExpiry lost, batch unusable for recall
    Wrong check digitSSCC ending 4Check digit should be 5Rejected at a partner receiving system
    Short GTIN13 digits under AI 01AI 01 needs exactly 14 digitsSymbol scans, data fails validation
    Space in a batchMY 4471Space is not in character set 82Encoder or scanner behaviour varies
    Impossible date(17)270230Not a real date in YYMMDDDownstream date parsing fails
    Duplicate AITwo AI 10 fieldsAI 10 appears more than onceReceiver takes whichever it saw first
    Unknown AI(99)ABCAI 99 is not in the sourced tableData 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.

    GS1 Barcode Generator Questions

    GS1-128 is Code 128 carrying GS1 Application Identifier data. The symbol starts with an FNC1 character in the first position, which tells the scanner the data is AI formatted. It is the barcode used on logistics labels for cartons and pallets, most often carrying an SSCC that identifies the physical unit being shipped.
    Three separate things people mix up. The GTIN is an identifier, a number that names a trade item. The element string is the data, one or more Application Identifiers each followed by its value. The barcode is the symbol, the printed pattern of bars that carries that data. One element string can be printed as several different symbols.
    Only Application Identifiers on the predefined length list may be followed directly by the next AI. Every other AI is variable length and must be terminated by an FNC1 separator, unless it is the last field in the element string. Missing that separator is the most common reason a logistics label scans into unusable data.
    In the GS1 reference data, predefined length AIs are the ones flagged as not requiring a separator. Their two digit prefixes are 00 to 04, 11 to 20, 31 to 36, and 41. AI 402 and AI 422 have fixed data formats but sit outside that list, so they still require an FNC1 separator when another field follows them.
    An SSCC is 18 digits: an extension digit you choose, your GS1 Company Prefix, a serial reference you allocate, and a check digit. The extension digit plus prefix plus serial reference always total 17 digits, so a longer company prefix leaves you a shorter serial reference. The check digit is arithmetic, not an allocation.
    A GTIN-14 is formed by putting an indicator digit in front of a GTIN without its check digit, then recalculating the check digit. The indicator distinguishes packaging levels of the same product, for example an inner pack and an outer case. Indicator 0 is reserved for the base unit, and 9 is used for variable measure trade items.
    No. Only a GS1 member organisation can issue a company prefix, and your GTINs are built on top of that prefix. This page renders a symbol from numbers you already hold and calculates check digits for you. Printing an invented GTIN on retail packaging risks colliding with another company’s product.
    We make no such claim. A trading partner label specification decides symbol placement, size, quiet zones, human readable text and which Application Identifiers are mandatory. This tool encodes the data you enter and shows you the element string it produced. Check the output against whatever specification your partner published.
    No. The Application Identifier table, the check digit arithmetic, the Code 128 encoding and the SVG rendering all run in your browser tab. Nothing you type is transmitted, stored or logged by us. You can disconnect from the network and the page keeps working, which is worth knowing if you are entering live customer order numbers.

    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.