ITF-14 و متداخل 2 من 5 (I-2/5) هي رموز خطية أساسية للكرتون، والمنصات، واللوجستيات الداخلية. يقوم ITF-14 بترميز a GTIN-14 (14 رقمًا، بما في ذلك رقم التحقق Mod-10) وعادةً ما يُطبع مع قضبان الحامل على الورق المقوى المموج. I-2/5 هو مضغوط، رقمي‑فقط،, طول-زوجي الرموز غالبًا ما تُستخدم للصواني الداخلية والحالات.
مثال كامل ( جاهز للنسخ واللصق)
ما ستحصل عليه:
- تطبيق وحدة تحكم .NET واحد يمكنه الإخراج ITF-14 و I-2/5 الباركودات.
- أ الرقم الرقمي للتحقق GTIN-14 مساعد لـ ITF-14.
- فرض الطول الزوجي لـ I-2/5.
- إعدادات افتراضية معقولة للطباعة (الهوامش، سمك الشريط، الارتفاع).
- إخراج PNG حسب اسم الملف.
1) Create the project and add the package
dotnet new console -n ItfAndI25Demo -f net8.0
cd ItfAndI25Demo
dotnet add package Aspose.BarCode
2) Replace Program.cs مع ما يلي
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) Run a few examples
# 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
خطوة بخطوة (ما يفعله الكود)
أساسيات ITF-14
- يقوم بترميز GTIN-14 (إجمالي 14 رقمًا).
- ال الرقم الأخير هو Mod-10 الرقم الرقابي.
- غالبًا ما يُطبع بحجم كبير مع المناطق الهادئة وأحيانًا قضبان الحامل (إطار حول الكود) على المموج.
في الكود: نقبل ما يصل إلى 13 رقمًا، نضيف أصفارًا على اليسار لتصبح 13 رقمًا، نحسب الرقم الرابع عشر، ونمرر جميع الأرقام الأربعة عشر إلى 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 of 5
- مُدمج،, numeric-only الرموزية.
- يتطلب عدد زوجي من الأرقام (الأزواج متداخلة).
- نحن left-pad مع
0إذا كان الإدخال بطول فردي.
string evenData = data.Length % 2 == 0 ? data : "0" + data;
using var gen = new BarCodeGenerator(EncodeTypes.Interleaved2of5, evenData);
الإعدادات الافتراضية الصديقة للطباعة
- البُعد X (سُمك الشريط/الوحدة):
3 pxهو نقطة انطلاق عملية للطابعات الحرارية. - ارتفاع الشريط:
~22 mmيعمل بشكل جيد على ملصقات 1×3″ أو 2×1″؛ اضبطه وفقًا لمخزونك. - المناطق الهادئة:
~4 mmيسار/يمين؛;2–3 mmأعلى/أسفل. - نص قابل للقراءة البشرية: إظهار أدناه (
CodeLocation.Below) إذا كان ملصقك يحتاج نصًا.
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;
أفكار التخصيص
- ملصقات أكبر / وسائط خشنّة → زيادة
XDimensionإلى4–5 px. - تسميات أكثر إحكامًا → تقليل ارتفاع الشريط (
18–20 mm) لكن لا تجوع المناطق الهادئة. - قمع HRT (نص قابل للقراءة البشرية) إذا كان تخطيطك يطبع النص في مكان آخر:
ملاحظة حول قضبان الحامل (ITF-14): يفضل العديد من الطابعات/المعايير وجود إطار أو أشرطة علوية/سفلية حول ITF-14 لمنع عمليات المسح القصيرة. إذا كان بناء Aspose.BarCode الخاص بك يكشف عن معلمات شريط حامل ITF محددة، فقم بتمكينها؛ وإلا، أضف الإطار في تخطيط الملصق الخاص بك.
استكشاف الأخطاء وإصلاحها
- لن يتم المسح على الكرتون المموج: زيادة
XDimension, تأكد من التباين العالي، أضف/أكد مناطق الهدوء، ضع في الاعتبار أشرطة الحامل. - تم رفض I-2/5 بسبب الطول غير الزوجي: لقد نسيت الحشو؛ استخدم الـ code’s
evenDataالمنطق. - الرقم الرقمي للتحقق في ITF-14 غير صحيح: تأكد من النجاح فقط الأرقام الـ13 الأولى إلى الحاسبة؛ دع الشيفرة تحسب الرابع عشر.
أفضل الممارسات
- قفل المعلمات (البُعد X، الارتفاع، الهوامش) في الإعدادات بحيث يكون الناتج قابلًا لإعادة الإنتاج.
- تحقق على الماسحات الضوئية المستهدفة وضع علامة على الوسائط—تعديل بواسطة زيادات صغيرة.
- قم بإصدار قوالبك إذا أضفت شعارات/نصًا فوق أو أسفل الأشرطة.
- يرجى تزويدي بالنص الذي ترغب في ترجمته.: I-2/5 لا يدعم غير الأرقام؛ نظّف المدخلات مبكرًا.
الخاتمة
مع بضع أسطر من الشيفرة، يمكنك إنتاج باركودات ITF-14 و Interleaved 2 of 5 قوية وصديقة للمسح الضوئي في .NET باستخدام Aspose.BarCode. ابدأ بالمثال الكامل أعلاه، ثم اضبط سمك الشريط والارتفاع والهوامش لتتناسب مع طابعاتك وماسحاتك. تجعل أدوات التحقق من الرقم الرقمي ومساعدي الطول الزوجي بياناتك آمنة وفقًا للمعايير من البداية.