Sign In
Products
ZPL ViewerBarcode GeneratorImage → ZPLZPL cheat sheetLabel DesignerTemplate Gallery
Developers
API QuickstartAPI ReferenceMCP ServerBulk GenerationWebhooksSDKs & ExamplesLimitsDirectPrint agent NewGitHub ActionVS Code extensionOn-Premise
Solutions
Logistics & ShippingE-CommerceERP & WMSManufacturingRetailHealthcare & LaboratoryAll solutions
Tools
ZPL Diagnostics HubZPL DebuggerSize & DPI AnalyzerDPI ConverterBarcode fit calculatorShipping Label AnalyzerFont InspectorOrientation DebuggerCalibration AssistantPrinter Compatibility CheckerBarcode Readability CheckerPrinter Language DetectorThermal Printer Test PackZPL ToolsEPL ToolsTSPL ToolsCPCL ToolsPrinter Language ConverterAll ToolsGuidesPricing
Language
EnglishTürkçeDeutsch
Home›Solutions›Food Labels: Batch, Expiry and GS1-128

Food Labels: Batch, Expiry and GS1-128

Verify the case labels that carry batch and expiry on screen, before they are printed.

The problem

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.

What does Labelixa do?

True GS1-128

`^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.

Chained fields in one barcode

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

Verify date and batch fields on screen

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.

EAN-13 for the retail face

On the consumer unit label the EAN-13 check digit is verified by the engine; a wrong digit produces a warning.

Example label

Food Labels: Batch, Expiry and GS1-128

This image was produced from the ZPL beside it with the Labelixa engine.

Try your own ZPL code →
ZPL
^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
^XZ

Commonly used symbologies

SYMBOLOGYCode 128

GS1-128 case label — GTIN + date + batch chain

SYMBOLOGYEAN-13

Consumer unit (shelf) barcode

SYMBOLOGYData Matrix

Traceability code on small packaging

How to integrate

  1. Paste your case label template into the preview tool and see it at its real size.
  2. Use `^BC` with mode D; bracketed AIs are encoded with correct FNC1 placement — a warning means the data breaks GS1 rules.
  3. Try the YYMMDD expiry format and the batch number with real values from your system.
  4. Once the template is final, generate from your ERP/WMS via the API; a recall drill then measures that the label actually scans.

Go to the API reference →

Frequently asked questions

How do I tell GS1-128 from plain Code 128?

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.

Are barcodes for weight-based products supported?

Yes — variable-measure AIs (e.g. 3103) can be added to the chain; the data must follow AI rules.

Do you store the product or batch data on the labels?

No. The rendering service is stateless: the ZPL you send is never written to disk or logged.