ITF-14 dan Berhenti 2 daripada 5 (I-2/5) merupakan simbol linear kuda kerja untuk karton, pallet, dan logistik dalaman. ITF-14 mengkodkan GTIN-14 (14 digit, termasuk digit cek Mod-10) dan biasanya dicetak dengan Beranda » Bar I-2/5 ialah sebuah kompak, hanya numerik, panjang simbolik yang sering digunakan untuk plat dalaman dan kes.


Contoh Lengkap (Copy-Paste Ready)

Apa yang anda dapatkan:

  • Satu aplikasi konsol .NET yang boleh mengeluarkan ITF-14 dan I-2/5 Barkod yang.
  • A ialah GTIN-14 digit cek Perkhidmatan untuk ITF-14.
  • Penegakan panjang untuk i2 / 5.
  • Default yang bermakna untuk cetak (margin, ketebalan bar, ketinggian).
  • PNG output oleh file.

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 Dengan berikut

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

Langkah demi langkah (Apa yang kod sedang lakukan)

ITF-14 yang penting

  • Kod A GTIN-14 (Sebanyak 14 buah buah).
  • yang digit terakhir Saya mempunyai Mod-10 Tentukan digit.
  • Sering dicetak dengan Kawasan yang tenang Kadang-kadang Beranda » Bar (satu bahagian di sekeliling kod) di atas corong.

Dalam kod : kami menerima sehingga 13 digit, pad tinggal kepada 13, mengira ke-14 dan lulus semua 14 digit kepada EncodeTypes.ITF14.

string gtin13 = gtinBase.PadLeft(13, '0');
char check = CalcGtin14CheckDigit(gtin13);
string gtin14 = gtin13 + check;
using var gen = new BarCodeGenerator(EncodeTypes.ITF14, gtin14);

2 daripada 5 penting

  • Kompas yang, Nombor sahaja Simbolik yang.
  • memerlukan sebuah Sebahagian daripada digit (Kumpulan ini mempunyai peranan yang berlainan).
  • Kami Kiri Pad dengan 0 Jika input ialah panjang.
string evenData = data.Length % 2 == 0 ? data : "0" + data;
using var gen = new BarCodeGenerator(EncodeTypes.Interleaved2of5, evenData);

Pencetakan-percuma default

  • X-dimensi (Kebanyakan bar / modul yang boleh digunakan): 3 px merupakan titik permulaan praktikal untuk pencetak termal.
  • Bar ketinggian: ~22 mm berfungsi dengan baik pada label 1×3′′ atau 2×1′′; disesuaikan untuk stok anda.
  • Kawasan yang tenang: ~4 mm Kanan / Kanan; 2–3 mm Top / bawah.
  • Artikel yang boleh dibaca oleh manusia: menunjukkan di bawah (CodeLocation.BelowJika label anda memerlukan teks.
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;

Idea Customization

  • Tag: label / media kasar Peningkatan XDimension 2 buah 4–5 px.
  • Label yang lebih ketat • Mengurangkan ketinggian (18–20 mm(Tidak pernah meletakkan kawasan yang tenang.
  • HRT (Human-readable text) yang boleh dibaca oleh manusia Jika layout anda mencetak teks di tempat lain: csharp gen.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.None;

Nota pada bar pembawa (ITF-14) : Ramai printer/standar lebih suka bingkai atau bar atas/dalam di sekitar ITF-14 untuk mengelakkan pemindaian pendek.Jika buatan Aspose.BarCode anda mendedahkan parameter bar pembawa ITF tertentu, mengaktifkan mereka; jika tidak, tambahkan bingkai dalam tata letak label anda.


masalah penyelesaian

  • Tidak akan memindahkan di corong: Peningkatan XDimension, memastikan kontras yang tinggi, menambah / mengesahkan zon tenang, pertimbangkan bar pembawa.
  • I-2/5 ditolak sebagai panjang yang pelik: Anda lupa untuk pad; gunakan kod evenData Logik yang.
  • ITF-14 cek digit salah: Pastikan anda melepasi 13 digit pertama sahaja mengira bahawa kod yang digunakan ialah 14.

Amalan terbaik

  • parameter penguncian (X-dimension, ketinggian, margin) dalam konfigurasi supaya output boleh diulang.
  • Periksa pada pemindai sasaran anda dan label media - melemahkan oleh Peningkatan kecil.
  • Versi template anda jika anda menambah logo/teks di atas atau di bawah bar.
  • Pastikan nombor:I-2/5 tidak menyokong non-digit; sanitize input awal.

Kesimpulan

Dengan beberapa barisan kod, anda boleh menghasilkan ITF-14 yang kukuh dan mesra skanner dan Interleaved 2 daripada 5 barcode dalam .NET menggunakan Aspose.BarCode. Mulakan dengan contoh lengkap di atas, kemudian tunjukkan ketebalan bar, ketinggian, dan margin kepada pencetak dan pemindai anda. Penolong digit dan panjang yang sama membuat standard data anda selamat dari awal.

More in this category