zplCore.comzplCore.com

18Scan-Proof: jeder Barcode zurückgelesen

Beantwortet vor dem Druck die Frage „trägt dieser Barcode die Daten, die ich schicke, und ist das Symbol sauber?“. ZplScanProof.Verify rendert das Etikett, liest jeden Barcode mit zwei unabhängigen Decodern (zxing-cpp und ZXing.Net) aus der Bitmap zurück und vergleicht mit den Felddaten nach ^FH, ^FN, ^SN, Prüfziffern und Invocation-Codes – GS1 Element für Element.

Online ausprobieren auf zplCloud.com: Barcode-Scan-Proof

Mehr dazu auf zplCloud.com: Guide: Warum dein ZPL-Barcode nicht scannt

Digitale Vorprüfung nach dem Vorbild von ISO/IEC 15415/15416 – keine ISO-konforme Verifikation. Die Note A–F wird aus dem gerenderten Bild berechnet; Druckphysik (Schwärzung, Geschwindigkeit, Material, Druckkopfverschleiß) ist nicht modelliert und braucht ein kalibriertes Prüfgerät am gedruckten Etikett.
var report = ZplScanProof.Verify(zpl, new ScanProofOptions { Dpi = 203, Robustness = true });
foreach (var s in report.Symbols)  // ^BC GS1-128 Match A "00376104250021234569" X = 0,501 mm
    Console.WriteLine($"{s.Command} {s.Symbology} {s.Status} {s.Grade} \"{s.DecodedData}\" X = {s.XDimensionMm:0.###} mm");
Console.WriteLine(report.LowestGrade);          // schlechteste digitale Note aller Symbole
string sarif = report.ToSarif("labels/shipping.zpl"), text = report.ToText();
ZplScanProof.Verify(new ZplCore.Barcodes.Barcode { Symbology = ZplCore.Barcodes.Symbology.Ean13, Code = "950600013435" });
zplcore verify pallet.zpl --dpi 203 [--robustness] [--format text|json|sarif] [--fail-on mismatch,grade:C]

[0.1] ^BC GS1-128 line 17 at 94,800 (624×260 dots, 0°)
  status: Match   digital grade: A (4.0)
  field data: "(00)376104250021234569"
  decoded:    "00376104250021234569"
    zxing-cpp: read
    ZXing.Net: read
  X-dimension: 4 dots = 0.501 mm
  quiet zones: left ≥14X (min. 10X), right ≥14X (min. 10X)

Status je Symbol

  • Match – gelesen = erwartet = Felddaten
  • DataAltered – gelesen = erwartet, aber die Symbologie hat die Daten verändert (z. B. falsche Prüfziffer ersetzt)
  • Mismatch – ein Decoder liest andere Daten
  • NotDecoded / NotDecodable – nicht lesbar bzw. kein Decoder für die Symbologie (dann nur Strukturprüfungen)
  • NotRendered – das Feld hat nichts gedruckt

Gemessen

  • X-Dimension in Dots und mm, ganzzahlige Module, Breit/Schmal-Verhältnis
  • Ruhezonen (begrenzt durch fremde Druckfarbe oder den Etikettenrand), Balkenhöhe, Abschneiden, Überlappung
  • Klarschriftzeile und benachbarter Text gegen die Daten
  • Robustness = true: zusätzliche Simulationen (z. B. Zielauflösung 203 dpi)
  • SARIF 2.1.0 mit Regel-IDs SP… wie zplcore comply

Grenzen: rein digital; Barcodes innerhalb von ^GF-Grafiken werden nicht als Barcode erkannt (dafür ZplScanProof.Verify(Barcode)); kein EPL. Lässt sich die native zxing-cpp-Bibliothek nicht laden (glibc älter als 2.38, z. B. Debian 12, oder musl/Alpine), läuft Scan-Proof nur mit ZXing.Net und meldet das als SP1004.