will failGS-04gs1

Scanner merges two GS1 fields into one

This variable-length AI is not terminated with FNC1, so the AI that follows it is read as part of its data.

Insert FNC1 (>8) after the variable-length element.

A label that trips it
^XA^BY4^FO50,50^BCN,254,Y,N,N,D^FD(01)00012345678900(10)ABC(17)260931^FS^XZ
What the check looks for

A variable-length AI not terminated with FNC1, AND not the last element in the string.

What Labelproof says about it4 findings · GS-04 highlighted
will failLY-02^XA · offset 0 · label 1

Neither ^PW nor ^LL is set. Both fall back to a value stored in the individual printer, not to a value in the spec — so the same ZPL prints differently on two printers of the same model.

Set ^PW and ^LL explicitly in every format.

will failBC-02^BC · offset 7 · label 1

The finished symbol is wider than the space available. The right-hand end is clipped and the symbol will not decode.

Reduce ^BY, shorten the data, or move the field left.

will failBC-03^BC · offset 7 · label 1

Quiet zone violated — the barcode has no clear margin at the label edge.

Move the field inward by at least 10 × the module width, or reduce ^BY.

GS1 requires a quiet zone of at least 10 × X-dimension on each side.

will failGS-01^FD · offset 7 · label 1

AI (01) GTIN must be exactly 14 digits with a valid check digit.

Pad the GTIN to 14 digits and recompute the mod-10 check digit.

This example does not currently trip GS-04 under the default 203 dpi GS1 profile. That is worth knowing rather than hiding — see the open items in the repository.

Check your own label

No signup, and we do not store your labels.

Open the linter
Scanner merges two GS1 fields into one — Labelproof