07GS1
Alle GS1-Symbologien laufen durch einen gemeinsamen Parser und Validator (portiert aus BWIPPs gs1process, Tabelle mit 534 Application Identifiern): Länge, Zeichensatz, Prüfziffern, Datumsangaben und Pflicht-/Ausschluss-Kombinationen. Eingabe in Klammerform (01)…(10)… oder roh mit FNC1/GS.
Online ausprobieren auf zplCloud.com: GS1-128 · GS1 DataMatrix · GS1 QR-Code · GS1 DataBar · Barcode prüfen
Mehr dazu auf zplCloud.com: Guide: GS1-AI-Datenbank · Vorlage: SSCC-Palettenlabel (GS1-128)
Empfohlen für GS1-128: die Daten in Klammerschreibweise (01)09521234543213(10)LOT42 angeben – im Label-Modell mit BarcodeItem.Symbology = Symbology.Gs1_128 oder per Ausdruck GS1("01", [Gtin], "10", [Lot]) gebaut und geprüft. Die FNC1-Trenner nach AIs variabler Länge werden automatisch gesetzt, der Barcode druckt als natives ^BC; FNC1 (>8) nicht von Hand setzen (Label.Validate() meldet es).
// GS1-128: AIs in Klammern; FNC1 und Trennzeichen setzt der Encoder, die AIs werden geprüft
var gs1 = new Barcode { Symbology = Symbology.Gs1_128, Code = "(01)09521234543213(17)261231(10)LOT42", Dpi = 203, BarWidth = 2, BarHeight = 70 };
var sscc = new Barcode { Symbology = Symbology.Sscc18, Code = "09501234567890123", Dpi = 203, BarWidth = 2, BarHeight = 70 }; // Prüfziffer ergänzt
var ean14 = new Barcode { Symbology = Symbology.Ean14, Code = "(01)04601234567893", Dpi = 203, BarWidth = 2, BarHeight = 70 };
var dm = new Barcode { Symbology = Symbology.Gs1DataMatrix, Code = "(01)09521234543213(21)SN12345", Dpi = 203, BarWidth = 5 };
// Composite: "linearer Teil|(AI)2D-Teil" – CC-A/B/C wird automatisch gewählt
var cc = new Barcode { Symbology = Symbology.Ean13Composite, Code = "2112345678900|(99)1234-abcd", Dpi = 203, BarWidth = 2, BarHeight = 60 };
try
{
new Barcode { Symbology = Symbology.Gs1_128, Code = "(01)09521234543213(17)261301" }.ToPng();
}
catch (FormatException ex)
{
Console.WriteLine(ex.Message); // ungültiges Datum in AI 17 (Monat 13)
}
GS1-128

SSCC-18

EAN-14

GS1 Data Matrix

EAN-13 Composite (CC-A)

DataBar Expanded Composite

GS1-128 Composite (CC-C)

"linearer Teil|(AI)…". Unterstützt für EAN-13/8, UPC-A/E, GS1-128 und alle DataBar-Varianten; CC-A, CC-B bzw. CC-C (nur GS1-128) wird nach Datenmenge gewählt. Beim Kodieren führen ungültige Daten zu einer FormatException mit AI und Grund.Parser & Validator direkt nutzen
Gs1.Parse, ParseBracketed, ParseRaw, Validate, ToElementString, ToRaw und NeedsSeparator sind öffentlich; das Ergebnis ist ein Gs1Result mit Elements und Errors. Für QR gibt es außerdem QrExtras.Gs1, SwissQr (Matrix plus Kreuzgeometrie) und Epc.
Gs1Result r = Gs1.Parse("(01)09521234543213(17)261301(10)LOT42"); // Klammerform oder roh mit GS
foreach (Gs1Element e in r.Elements)
Console.WriteLine($"AI {e.Ai} = {e.Value}");
if (!r.IsValid)
foreach (Gs1Error err in r.Errors)
Console.WriteLine(err); // "AI 17: Invalid month" (err.Ai, err.Code, err.Message)
var ok = Gs1.Parse("(01)09521234543213(10)LOT42(17)261231");
string raw = Gs1.ToRaw(ok.Elements); // "0109521234543213" + "10LOT42" + GS + "17261231"
string text = Gs1.ToElementString(ok.Elements);
List<Gs1Error> errors = Gs1.Validate(ok.Elements, lintReqs: true); // inkl. Pflicht-Kombinationen
bool gs = Gs1.NeedsSeparator("10"); // true: variable Länge → FNC1/GS danach

