ITF-14 und Interleaved 2 von 5 (I-2/5) sind Workhorse lineare Symbolien für Kartons, Paletten und innere Logistik. ITF-14-Kode eine GTIN-14** (14 Zahlen, einschließlich eines Mod-10-Check-Digital) und wird in der Regel mit bearer-Baren auf korugierter Karte gedruckt. I-2/5 ist eine kompakte, numerisch-only, even-Länge-Symbolologie, die oft für interne Spuren und Fälle verwendet wird.
Vollständiges Beispiel (Copy-Paste Ready)
Was Sie erhalten:
- Eine .NET-Konsole-App, die ITF-14 und I-2/5 Barcodes ausführen kann.
- Ein GTIN-14 Check-Digital Helper für ITF-14.
- Even-Länge Durchsetzung für I-2/5.
- Empfindliche Defekte für Druck (Margen, Bardichtheit, Höhe).
- PNG-Produktion nach Filenamen.
1) Das Projekt erstellen und das Paket hinzufügen
dotnet new console -n ItfAndI25Demo -f net8.0
cd ItfAndI25Demo
dotnet add package Aspose.BarCode
2) Ersatz Program.cs
mit der folgenden
using System;
using Aspose.BarCode.Generation;
namespace ItfAndI25Demo
{
class Program
{
// Usage:
// ITF-14 -> dotnet run -- itf14 400638133393 260930
// (first arg "itf14", second is GTIN base ≤13 digits; we'll compute the 14th check digit)
// I-2/5 -> dotnet run -- i25 123456789
//
// Output files:
// ITF14_<gtin14>.png
// I25_<dataEven>.png
static int Main(string[] args)
{
if (args.Length < 2)
{
Console.WriteLine("Usage:");
Console.WriteLine(" ITF-14: dotnet run -- itf14 <gtin_base_≤13_digits> [xPixels=3] [heightMM=22] [marginMM=4]");
Console.WriteLine(" I-2/5 : dotnet run -- i25 <numeric_data> [xPixels=3] [heightMM=22] [marginMM=4]");
return 1;
}
var mode = args[0].Trim().ToLowerInvariant();
int xPixels = args.Length > 2 && int.TryParse(args[2], out var x) ? Math.Max(1, x) : 3;
float heightMM = args.Length > 3 && float.TryParse(args[3], out var h) ? Math.Max(10f, h) : 22f;
float marginMM = args.Length > 4 && float.TryParse(args[4], out var m) ? Math.Max(1f, m) : 4f;
try
{
switch (mode)
{
case "itf14":
{
string gtinBase = args[1].Trim();
if (gtinBase.Length > 13 || !IsAllDigits(gtinBase))
throw new ArgumentException("For ITF-14, provide a numeric GTIN base (≤13 digits). The 14th check digit will be computed.");
// Build full GTIN-14: left-pad to 13 digits, then add Mod-10 check digit
string gtin13 = gtinBase.PadLeft(13, '0');
char check = CalcGtin14CheckDigit(gtin13);
string gtin14 = gtin13 + check;
// ITF-14 encodes the 14-digit GTIN
using var gen = new BarCodeGenerator(EncodeTypes.ITF14, gtin14);
// Print-friendly defaults
gen.Parameters.Barcode.XDimension.Pixels = xPixels; // bar/module thickness
gen.Parameters.Barcode.BarHeight.Millimeters = heightMM;
gen.Parameters.Barcode.LeftMargin.Millimeters = marginMM;
gen.Parameters.Barcode.RightMargin.Millimeters = marginMM;
gen.Parameters.Barcode.TopMargin.Millimeters = Math.Max(2f, marginMM / 2f);
gen.Parameters.Barcode.BottomMargin.Millimeters = Math.Max(2f, marginMM / 2f);
// Optional: show human-readable text below (depends on layout preference)
gen.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
gen.Parameters.Barcode.CodeTextParameters.FontSize.Point = 8f;
// Save PNG (lossless)
string file = $"ITF14_{gtin14}.png";
gen.Save(file, BarCodeImageFormat.Png);
Console.WriteLine($"✅ ITF-14 saved: {file}");
break;
}
case "i25":
case "interleaved2of5":
case "interleaved_2_of_5":
{
string data = args[1].Trim();
if (!IsAllDigits(data))
throw new ArgumentException("I-2/5 requires numeric data.");
// I-2/5 needs an even number of digits; if odd, left-pad with '0'
string evenData = data.Length % 2 == 0 ? data : "0" + data;
using var gen = new BarCodeGenerator(EncodeTypes.Interleaved2of5, evenData);
// Print-friendly defaults
gen.Parameters.Barcode.XDimension.Pixels = xPixels;
gen.Parameters.Barcode.BarHeight.Millimeters = heightMM;
gen.Parameters.Barcode.LeftMargin.Millimeters = marginMM;
gen.Parameters.Barcode.RightMargin.Millimeters = marginMM;
gen.Parameters.Barcode.TopMargin.Millimeters = Math.Max(2f, marginMM / 2f);
gen.Parameters.Barcode.BottomMargin.Millimeters = Math.Max(2f, marginMM / 2f);
gen.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
gen.Parameters.Barcode.CodeTextParameters.FontSize.Point = 8f;
string file = $"I25_{evenData}.png";
gen.Save(file, BarCodeImageFormat.Png);
Console.WriteLine($"✅ Interleaved 2 of 5 saved: {file}");
break;
}
default:
throw new ArgumentException("First argument must be 'itf14' or 'i25'.");
}
return 0;
}
catch (Exception ex)
{
Console.Error.WriteLine("❌ Error: " + ex.Message);
return 2;
}
}
// ----------------- Helpers -----------------
// GTIN-14 check digit (Mod-10). Argument must be the first 13 digits as a string.
static char CalcGtin14CheckDigit(string first13)
{
if (first13 is null || first13.Length != 13 || !IsAllDigits(first13))
throw new ArgumentException("CalcGtin14CheckDigit expects 13 numeric digits.");
int sum = 0;
// Rightmost (position 13) is index 12; multiply alternating by 3 and 1, starting with 3 on the right.
// From the rightmost toward left: 3,1,3,1,...
for (int i = 0; i < 13; i++)
{
int digit = first13[12 - i] - '0';
int weight = (i % 2 == 0) ? 3 : 1;
sum += digit * weight;
}
int mod = sum % 10;
int check = (10 - mod) % 10;
return (char)('0' + check);
}
static bool IsAllDigits(string s)
{
if (string.IsNullOrEmpty(s)) return false;
foreach (char c in s)
if (c < '0' || c > '9') return false;
return true;
}
}
}
3) Gehen Sie ein paar Beispiele
# ITF-14: pass ≤13 digits, we compute the 14th check digit
dotnet run -- itf14 400638133393
# -> ITF14_0400638133393X.png (X = computed check digit)
# Interleaved 2 of 5: any numeric string; we pad a leading 0 if odd length
dotnet run -- i25 123456789
# -> I25_0123456789.png
Schritt für Schritt (Was der Code tut)
ITF-14 Essentials
- Verschlüsselt eine GTIN-14 (14 Zahlen insgesamt).
- Der ** letzte Zahlen** ist ein Mod-10 check-Digital.
- Oft gedruckt groß mit quiet zones und manchmal bearer bars (ein Rahmen um den Code) auf korrigiert.
In dem Code: wir akzeptieren bis zu 13 Zahlen, verlassen auf 13, berechnen die 14. und übertragen alle 14 EncodeTypes.ITF14
.
string gtin13 = gtinBase.PadLeft(13, '0');
char check = CalcGtin14CheckDigit(gtin13);
string gtin14 = gtin13 + check;
using var gen = new BarCodeGenerator(EncodeTypes.ITF14, gtin14);
Interleaved 2 von 5 essentiellen
- Kompakte, numerisch-nur Symbolologie
- Es erfordert eine einbare Anzahl von Zahlen (Paare sind interleaved).
- Wir left-pad mit
0
wenn der Eingang lang ist.
string evenData = data.Length % 2 == 0 ? data : "0" + data;
using var gen = new BarCodeGenerator(EncodeTypes.Interleaved2of5, evenData);
Druckfreundliche Defekte
- X-Dimension (Bar / Modul Dicke):
3 px
Es ist ein praktischer Ausgangspunkt für thermische Drucker. - Barhöhe *
~22 mm
funktioniert gut auf 1×3′′ oder 2×1′′ Etiketten; angepasst für Ihre Lagerung.
- Barhöhe *
- Quittgebiete *
~4 mm
links und rechts;2–3 mm
oben und unten.
- Quittgebiete *
- Human-readable text: zeigen Sie unten (
CodeLocation.Below
wenn Ihr Etikett Text benötigt.
gen.Parameters.Barcode.XDimension.Pixels = 3;
gen.Parameters.Barcode.BarHeight.Millimeters = 22f;
gen.Parameters.Barcode.LeftMargin.Millimeters = 4f;
gen.Parameters.Barcode.RightMargin.Millimeters = 4f;
gen.Parameters.Barcode.TopMargin.Millimeters = 2f;
gen.Parameters.Barcode.BottomMargin.Millimeters = 2f;
gen.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
gen.Parameters.Barcode.CodeTextParameters.FontSize.Point = 8f;
Customisierung Ideen
Bigger Label / harte Medien → Erhöhung
XDimension
zu4–5 px
.Tighter Label → Verringerung der Barhöhe (
18–20 mm
Aber niemals Hunger in ruhigen Zonen.Suppress HRT (Human-readable text), wenn Ihr Layout Text an anderer Stelle druckt:
gen.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.None;
Anmerkung auf Trägerfarben (ITF-14): Viele Drucker/Standards bevorzugen ein Rahmen oder Top/Bottom Bars um ITF-14 um kurze Scans zu verhindern.Wenn Ihr Aspose.BarCode Build spezifische Parameter des Traderfarbes exponiert, aktivieren Sie sie; sonst fügen Sie das Rahmen in Ihren Etikett-Layout hinzu.
Troubleshooting
- Won’t scan on corrugated: Erhöht
XDimension
, einen hohen Kontrast zu gewährleisten, ruhige Zonen hinzuzufügen / bestätigen, trager-baren berücksichtigen. - I-2/5 als ungewöhnliche Länge abgelehnt: Sie vergessen zu paden; verwenden Sie den Code
evenData
die Logik. - ITF-14 Check-Digital falsch: Stellen Sie sicher, dass Sie nur die ersten 13 Zahlen an den Kalkulator übertragen; lassen Sie den Code den 14. berechnen.
Beste Praktiken
- Lock Parameter (X-Dimension, Höhe, Margen) in Konfiguration so dass der Ausgang reproduzierbar ist.
- ** Überprüfen Sie Ihre Zielscanners** und Etikettierungsmedien – tweak durch kleine Erhöhungen.
- Version Ihrer Template, wenn Sie Logos/Text oben oder unten hinzufügen.
- Halten Sie es numerisch: I-2/5 unterstützt keine Non-Digits; Sanitize Eingänge früh.
Schlussfolgerungen
Mit ein paar Zeilen von Code können Sie robust, scannerfreundlich ITF-14 und Interleaved 2 von 5 Barcodes in .NET mit Aspose.BarCode produzieren.Starten Sie mit dem vollständigen Beispiel oben, dann tun Sie die Dichte der Bar, Höhe und Margen zu Ihren Drucker und Scannern.
More in this category
- Aspose.BarCode 2D Barcode Reader in .NET: C# Guide
- Scannen Sie QR-Codes aus Bildern mit Aspose.BarCode für .NET
- Multi-Barcode-Anerkennung in .NET mit Aspose.BarCode
- GS1 DataBar (RSS-14) Barcode: Einzelhandel, Frische Lebensmittel und Gesundheitsversorgung
- Anpassung der Barcode-Generation in .NET mit Aspose.BarCode