Verify the case labels that carry batch and expiry on screen, before they are printed.
In food, traceability lives in the batch number: when a recall comes, the label says which case belongs to which batch. If the GS1-128 on the case label is wrong — FNC1 missing, AI order broken, date format off — the retail chain's warehouse rejects the case and the shipment waits at the dock. The problem is usually in the template, not the printer, and nobody sees it until it comes off the thermal printer.
`^BC` mode D starts the data with FNC1 and produces GS1-128 validated against AI rules; data without AIs does not silently fall back to plain Code 128 — you get a warning.
(01) GTIN, (15/17) date, (10) batch — and (310x) weight where needed — are chained in one barcode; the receiving warehouse system resolves the fields without separators.
The YYMMDD format of the expiry and the position of the batch number are visible at real size before printing; a wrong template is caught on screen, not at the dock.
On the consumer unit label the EAN-13 check digit is verified by the engine; a wrong digit produces a warning.
This image was produced from the ZPL beside it with the Labelixa engine.
Try your own ZPL code →^XA
^FO25,20^A0N,26,24^FDTOMATO PASTE 24x700G^FS
^FO25,56^A0N,20,18^FDBATCH: L2408A BBD: 2027-02-28^FS
^FO25,90^BY2,3,80^BCN,80,Y,N,N,D^FD(01)08691234567890(17)270228(10)L2408A^FS
^XZGS1-128 case label — GTIN + date + batch chain
SYMBOLOGYEAN-13Consumer unit (shelf) barcode
SYMBOLOGYData MatrixTraceability code on small packaging
GS1-128 starts with FNC1 and the scanner reports the `]C1` identifier. In mode D Labelixa validates AI rules; non-conforming data produces a warning instead of silently degrading.
Yes — variable-measure AIs (e.g. 3103) can be added to the chain; the data must follow AI rules.
No. The rendering service is stateless: the ZPL you send is never written to disk or logged.