A barcode can decode successfully and still contain the wrong GS1 structure. The reader may return visible text while hiding a missing separator, an incorrect application identifier, or a symbol generated without GS1 mode. This explanation is for engineers creating labels and validating reader integration. Start by separating application data, barcode encoding, and reader output; then test each layer independently before releasing a label format.
Separate the data from the barcode encoding
GS1 application identifiers, or AIs, define what follows them. They identify fields such as a trade item number, expiration date, batch number, or serial number. The barcode symbology determines how those fields and their separators become a printed symbol.
Three representations must agree, but they are not identical:
- Human-readable interpretation: text printed beside the symbol, commonly showing AIs in parentheses.
- Encoded element string: AI digits, field values, and any required field separators.
- Reader output: decoded data, potentially accompanied by a symbology identifier, prefix, suffix, or configured substitutions.
Do not assume that text printed below a barcode is the exact string encoded inside it. Parentheses usually identify AIs for human readers; they are not normally encoded as AI delimiters.
Likewise, a successful decode proves only that the reader recovered data. It does not establish correct field boundaries or compliance with an application specification. The distinction is covered further in barcode reader verification for label inspection.
Let application identifiers determine the field boundaries
An AI tells a GS1 parser both the field meaning and its permitted structure. Some fields have predefined lengths; others have variable lengths and need a separator when another field follows.
The following common AIs illustrate the difference. They are not a complete AI dictionary.
| AI | Meaning | Data format | Separator in the example below |
|---|---|---|---|
01 |
Global Trade Item Number | Exactly 14 digits | Not needed after this predefined-length field |
17 |
Expiration date | Exactly 6 digits, using YYMMDD | Not needed after this predefined-length field |
10 |
Batch or lot number | Variable length, up to 20 permitted characters | Required because another field follows |
21 |
Serial number | Variable length, up to 20 permitted characters | Not needed when it is the final field |
The critical distinction is not simply whether the field contains digits. A numeric variable-length field can still require a separator.
Also, do not generalize from this table that every fixed-length AI permits separator omission. GS1 defines a specific set of predefined-length element strings. Use the current AI definitions and predefined-length rules when introducing additional fields.
A parser should read the AI and apply its definition. Searching for familiar AI digits inside arbitrary field values is unsafe because those digits can legitimately occur within the data.
Treat the initial FNC1 as a symbology feature
The initial FNC1 establishes GS1 interpretation. It is not an ordinary printable character that you place at the front of every input string.
In GS1 DataMatrix, a dedicated FNC1 codeword appears in the first data position. Its codeword value is 232. That value describes the barcode encoding; it is not an instruction to insert a character with that numeric value into an application string.
GS1 QR Code uses the FNC1 first-position mode indicator. This is a QR encoding mode feature, not a normal leading text byte.
For either symbology, an encoder's documented GS1 option should establish the correct initial structure. An input string beginning with a group separator does not, by itself, prove that structure was created.
A reader also need not return a leading separator character for the initial FNC1. It may instead report the GS1 interpretation through a symbology identifier or result metadata.
Distinguish FNC1 from the group separator character
FNC1 is a barcode function. The group separator, abbreviated GS, is a control character commonly returned at an internal GS1 field boundary.
Its numeric representations are:
ASCII decimal: 29
Hexadecimal: 0x1D
Unicode code point: U+001D
Hexadecimal 0x29 is decimal 41, the closing parenthesis character. Confusing decimal 29 with hexadecimal 29 changes the data completely.
For readable examples below, [GS] means one group separator control character. Those four visible characters are notation only. They must not appear literally in the production payload unless an encoder explicitly documents that input syntax.
Encoder APIs differ. Some accept a GS control character and translate it appropriately when GS1 mode is enabled. Others require a documented token, structured field interface, or symbology-specific setting. There is no universal placeholder string that every encoder interprets as FNC1.
GS1 QR Code has an additional detail: within QR alphanumeric segments, a single percent sign represents a separator, while a doubled percent sign represents a literal percent sign. Byte-mode handling differs. Do not perform blanket percent replacement across arbitrary input; let the documented encoding interface handle the selected mode.
For GS1 DataMatrix, the encoder must likewise distinguish the initial GS1 indicator from internal separator functions. Verify its documented treatment rather than inferring behavior from a generic Data Matrix class name.
Build and count a worked example
Consider these illustrative values:
(01)09506000134352(17)271231(10)LOT7(21)SN12345
The example demonstrates structure only. A mathematically valid trade item number is not evidence that its use has been authorized or allocated to your organization.
The logical element string is:
01095060001343521727123110LOT7[GS]21SN12345
The encoder must additionally establish the appropriate initial GS1 structure for the chosen symbology. The displayed element string does not represent that mode setting.
Read the fields in order:
-
01introduces the following 14-digit trade item number. -
17introduces the following 6-digit expiration date. -
10introduces the batch valueLOT7. - The separator terminates that variable-length batch field.
-
21introduces the final serial valueSN12345.
Without the separator after LOT7, the apparent start of the serial field can become part of the batch value. A decoder may still return the complete string without reporting an error.
Count the logical payload before adding reader prefixes or terminators:
This count treats GS as one character and excludes the initial GS1 mode indication. It is not a prediction of symbol size: encoding modes, error correction, and symbology overhead affect the printed symbol.
The trade item number also has a check digit. For this example, weighting the first 13 digits alternately by 3 and 1, starting from the rightmost of those digits, gives a total of 78.
That confirms the final digit mathematically. It does not validate the date, AI ordering requirements, permitted business use, or application-specific field requirements.
Encode through a documented GS1 interface
Configure the encoder explicitly for the required GS1 symbology. A generic QR or Data Matrix output option is not sufficient evidence of GS1 support.
Use this preparation sequence:
- Define the fields independently. Store each AI and its value separately before assembling an element string.
- Validate the values. Check field length, permitted characters, check digits, and relevant date rules.
- Determine field boundaries. Add separators where the AI rules require them, rather than after every field.
- Select the documented GS1 mode. Confirm how the encoder establishes the initial FNC1 structure.
- Supply internal separators as documented. Record whether the interface expects a control character, token, or structured element list.
- Generate the symbol and its readable text separately. Keep presentation parentheses out of the encoded AI structure.
Do not assume an option inserts missing internal separators automatically. Unless the API explicitly accepts structured GS1 fields, it may have no reliable way to determine where a variable-length value ends.
If your software stack rejects the image before decoding begins, resolve that separately using the barcode decoder image compatibility checks. An image input error is not evidence of incorrect GS1 encoding.
Verify raw reader output before application parsing
First capture the reader's output without trimming, replacing, or splitting characters. Display nonprinting characters as numeric values or escaped notation so that a separator cannot disappear visually.
For the worked example, confirm all of the following:
- The reported symbology indicates GS1 interpretation, using documented result metadata or a configured symbology identifier.
- The logical data contains exactly one internal GS separator.
- That separator occurs immediately after
LOT7. - The serial value begins after the separator and AI
21. - Reader-added prefixes, suffixes, and line terminators are identified separately.
Then parse the element string into named fields and compare every value against the original source record. Avoid validating only the combined text length; two incorrect boundaries can still produce the expected total.
The camera barcode decoding workflow explains the broader separation between image acquisition, decoding, and application validation.
Run negative tests as well. Remove the batch separator deliberately, supply an invalid trade item check digit, and exceed a permitted field length. The validation layer should reject these cases even if the underlying barcode remains readable.
Before changing an installed reader's formatting options, preserve its settings using the vision reader configuration backup checklist. Otherwise, a changed output substitution can be mistaken for an encoder correction.
Choose a reader for observable data, not just successful reads
When evaluating fixed code readers, ask for documented support for the required GS1 symbologies and transparent separator handling. Neither the camera resolution nor the interface name establishes those capabilities.
The camera and reader finder helps narrow hardware candidates. Confirm the following behaviors with actual sample labels before selecting a reader:
| Requirement | Evidence to request |
|---|---|
| GS1 recognition | Symbology metadata or documented identifier output |
| Separator preservation | Captured output showing the internal GS character |
| Output formatting | Documented prefix, suffix, and substitution settings |
| Application integration | A complete message captured through the intended interface |
| Failure handling | Separate handling for unreadable symbols and invalid parsed data |
The LS-CRD-0028 lists Fast Ethernet and a global shutter. Treat it as a hardware candidate requiring confirmation of the GS1 and output behaviors above.
- Interface
- Fast Ethernet
- Resolution
- 5 MP
- Sensor format
- 1/1.7"
- Shutter
- Global
The LS-CRD-0047 lists USB and a global shutter. Its suitability likewise depends on documented symbology support and an end-to-end output test.
- Resolution
- Up to 3 MP
- Shutter
- Global
- Interface
- USB
Neither listing alone establishes the required GS1 behavior. For a USB integration, verify whether your application receives raw control characters or a translated input stream; the USB barcode data capture guide addresses that interface distinction.
If you need compatible connection modules or optical components, review code reader accessories through the accessory finder. Confirm compatibility with the selected reader instead of assuming that an accessory can change its encoding or parsing capabilities.
Resolve ambiguous symptoms and release the format
Several failures look similar on screen but require different corrections:
- No visible separator: inspect numeric character values before changing the encoder. The application may simply hide control characters.
- Literal placeholder text: replace the placeholder with the encoder's documented separator representation.
-
A closing parenthesis appears: check for confusion between decimal 29 and hexadecimal
0x29. - The serial number merges into the batch: inspect the boundary after the variable-length batch field.
- Fields parse correctly but GS1 identification is absent: verify the initial encoding mode independently of internal separators.
- Only printed labels fail: inspect image quality and symbol presentation rather than changing valid data structure.
When preparing test images, preserve the complete symbol and its required surrounding margin. The barcode cropping and quiet-zone guide explains why tight crops can create a separate reading problem.
Before release, complete this short acceptance checklist:
- Confirm the current AI definitions and application-specific requirements.
- Retain the original field values and expected parsed output.
- Save an escaped or hexadecimal capture of reader output.
- Test both GS1 QR Code and GS1 DataMatrix independently if both are supported.
- Include literal percent signs in QR tests when permitted by the selected field definition.
- Test minimum, typical, and maximum permitted variable-field lengths.
- Confirm invalid structures are rejected by the application.
- Preserve encoder settings, reader settings, and a known-good printed sample.
For a new station, start with the fixed code reader category. For an existing integration, send the field definitions, expected separator positions, and captured reader output through technical support so the discussion starts with observable evidence.
Questions
Does putting ASCII 29 at the beginning create a GS1 barcode?
Not necessarily. A leading group separator is application data unless the encoder explicitly documents special treatment. GS1 QR Code needs its FNC1 first-position mode indicator, while GS1 DataMatrix needs its initial FNC1 codeword. Use the documented GS1 interface and verify the resulting symbology metadata.
When does a variable-length GS1 field need a separator?
A variable-length field generally needs a separator when another element string follows it. A final variable-length field does not need one merely to mark the end of the symbol. Check the AI definition and GS1 predefined-length rules rather than placing separators after every value.
Should application identifier parentheses be encoded?
Parentheses normally belong to the human-readable interpretation printed near the barcode. The encoded element string contains the AI digits directly before their values. Do not remove parentheses indiscriminately from business data, however; distinguish AI presentation syntax from characters legitimately permitted inside a value.
Why does the reader display no separator even though the fields parse correctly?
A reader may display only printable characters, replace control characters, or report symbology information outside the payload. Capture the original message and inspect character values before blaming the symbol. Then compare the raw message with the application's parsed fields to locate the transformation.
Can the same logical GS1 data be used in QR Code and DataMatrix?
They can carry the same GS1 element strings, but their initial GS1 indication and internal encoding mechanisms differ. Their printed dimensions and reader support can also differ. Validate each generated symbology through the intended reader and interface rather than accepting one successful test as proof for both.

