GS1-128 and FNC1 explained
GS1-128 is not a separate symbology. It is Code 128 with an FNC1 character directly after the start character. That FNC1 tells the scanner: the data that follows is GS1 data made of Application Identifiers (AIs).
Element strings
GS1 data is a chain of element strings: an AI followed by its data.
(01)09521234543213(10)ABC123(17)251231
The parentheses are only for people. They appear in the human-readable text under the barcode but are never encoded. Encoded, the example becomes the digits and letters without parentheses, with FNC1 characters where needed.
When is an FNC1 separator needed?
- AIs with a predefined length, such as (01) GTIN or (17) expiry date, need no separator. The scanner knows where they end.
- AIs with variable length, such as (10) batch/lot or (21) serial number, must be followed by an FNC1 separator if another element string comes after them.
- The last element string never needs a separator.
Tip: put predefined-length AIs first and variable-length AIs last. That saves separators and makes the barcode shorter. Which AI has which length is listed in the Application Identifier table.
What the scanner sends
A scanner with symbology identifiers enabled transmits:
]C1at the start for GS1-128 (]d2for GS1 DataMatrix,]Q3for GS1 QR Code)- the AIs and data without parentheses
- each separator FNC1 as the ASCII group separator
GS(byte 29)
]C1010952123454321310ABC123<GS>17251231
If a scanner reports ]C0, the barcode is plain Code 128 without the leading FNC1, and software will not recognise it as GS1 data.
Common mistakes
- Parentheses encoded as data. The barcode then contains
(and)characters and is not valid GS1. - Plain Code 128 instead of GS1-128. The FNC1 in first position is missing.
- Missing separator after a variable-length field. The next AI is read as part of the previous field, for example the batch number swallows the expiry date.
- Wrong check digit in (00) or (01). Validate with the GTIN Validator first.
Related tools
- GS1 Parser: paste scanner output or bracketed data and see every AI
- Application Identifier table: length, format and rules of every AI
- Barcode Generator: create GS1-128 and GS1 DataMatrix
- Barcode Decoder: read a barcode image and check its GS1 content