În mediul de afaceri de astăzi rapid, tehnologia codului de bar joacă un rol esențial în simplificarea operațiunilor și îmbunătățirea gestionării datelor. printre diferite standarde de cod bar, GS1-128 este utilizat pe scară largă în întreaga industrie pentru versatilitatea sa și capacitatea de a codifica informațiile detaliate despre produs. Acest ghid vă îndreaptă prin generarea codurilor cu bar cu Aspose.BarCode pentru .NET – de la înțelegerea Application Identifiers (AIs) la personalizarea aspectului și exportarea imaginilor.

Exemplu complet

Exemplul final la final:

  • Construiește o stringă valabilă GS1 folosind AIs comune: (01) GTIN-14, (17) Expiry YYMMDD* , () Batch/Lot* și (21) Serial*.
  • Validează lungimi / formate.
  • Renderă o imagine GS1-128 cu dimensiuni/margine prietenoase cu imprimarea.
  • Salvează un fișier PNG. Puteți transmite valori cu cod dur sau le puteți transfera prin intermediul argelor de comandă.
// File: Program.cs
// Compile: dotnet add package Aspose.BarCode && dotnet build
// Run (examples):
//   dotnet run --project . -- 1234567890123 260930 ABC123 SN-00987
//   dotnet run --project . -- 400638133393 260930 LOT-77 SER-42   (GTIN will be padded to 14 digits)

using System;
using Aspose.BarCode.Generation;

namespace GS1_128_BarcodeExample
{
    class Program
    {
        static int Main(string[] args)
        {
            try
            {
                // ---------------------------
                // 1) Read inputs (or defaults)
                // ---------------------------
                // Args: [0]=GTIN (≤14 digits), [1]=EXP YYMMDD, [2]=BATCH (var len), [3]=SERIAL (var len)
                string gtinRaw    = args.Length > 0 ? args[0] : "1234567890123";
                string expYyMmDd  = args.Length > 1 ? args[1] : "260930";       // 2026-09-30
                string batchLot   = args.Length > 2 ? args[2] : "ABC123";
                string serial     = args.Length > 3 ? args[3] : "SN-00987";

                // ---------------------------
                // 2) Normalize & validate
                // ---------------------------
                // Ensure GTIN is 14 digits (pad left with zeros when shorter)
                if (gtinRaw.Length > 14 || !IsAllDigits(gtinRaw))
                    throw new ArgumentException("GTIN must be numeric and ≤ 14 digits.");

                string gtin14 = gtinRaw.PadLeft(14, '0');
                if (gtin14.Length != 14) throw new ArgumentException("GTIN must be exactly 14 digits after padding.");

                // Optional (advanced): you can calculate or verify GTIN check digit here if desired.

                if (!IsValidYyMmDd(expYyMmDd))
                    throw new ArgumentException("(17) Expiration must be YYMMDD and represent a valid calendar date.");

                // Variable-length AIs (10) & (21) can be any non-empty strings; keep them short & scanner-friendly.
                if (string.IsNullOrWhiteSpace(batchLot)) throw new ArgumentException("(10) Batch/Lot cannot be empty.");
                if (string.IsNullOrWhiteSpace(serial))   throw new ArgumentException("(21) Serial cannot be empty.");

                // ---------------------------
                // 3) Compose GS1 code text
                // ---------------------------
                // Parentheses are human-readable; the library handles FNC1 as needed.
                string gs1Text = $"(01){gtin14}(17){expYyMmDd}(10){batchLot}(21){serial}";

                // ---------------------------
                // 4) Configure generator
                // ---------------------------
                using (var generator = new BarCodeGenerator(EncodeTypes.GS1_128, gs1Text))
                {
                    // Minimum module (bar) thickness — increase for thermal printers / rough media
                    generator.Parameters.Barcode.XDimension.Pixels = 3;

                    // Symbol height (for 1D-like linear symbol height inside GS1-128 area)
                    generator.Parameters.Barcode.BarHeight.Millimeters = 22f;

                    // Target output size (entire image). Adjust per label stock / DPI.
                    generator.Parameters.Barcode.ImageWidth.Inches  = 2.8f;
                    generator.Parameters.Barcode.ImageHeight.Inches = 1.2f;

                    // Quiet zones (margins) — critical for scan reliability
                    generator.Parameters.Barcode.LeftMargin.Millimeters   = 4f;
                    generator.Parameters.Barcode.RightMargin.Millimeters  = 4f;
                    generator.Parameters.Barcode.TopMargin.Millimeters    = 2f;
                    generator.Parameters.Barcode.BottomMargin.Millimeters = 2f;

                    // Human-readable text placement and formatting
                    generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
                    generator.Parameters.Barcode.CodeTextParameters.FontSize.Point = 8f;
                    generator.Parameters.Barcode.CodeTextParameters.Space.Millimeters = 1.0f;

                    // ---------------------------
                    // 5) Save image (by extension)
                    // ---------------------------
                    string fileName = $"GS1_128_{gtin14}_{batchLot}_{serial}.png";
                    generator.Save(fileName);
                    Console.WriteLine($"✅ GS1-128 barcode saved: {fileName}");
                }

                return 0;
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("❌ Error: " + ex.Message);
                Console.Error.WriteLine("Usage: <exe> <gtin≤14digits> <expYYMMDD> <batch> <serial>");
                return 1;
            }
        }

        // ---- Helpers ---------------------------------------------------------

        // Minimal YYMMDD validation (1900–2099 windowing for simplicity)
        static bool IsValidYyMmDd(string yymmdd)
        {
            if (string.IsNullOrWhiteSpace(yymmdd) || yymmdd.Length != 6) return false;
            if (!IsAllDigits(yymmdd)) return false;

            int yy = int.Parse(yymmdd.Substring(0, 2));
            int mm = int.Parse(yymmdd.Substring(2, 2));
            int dd = int.Parse(yymmdd.Substring(4, 2));

            int year = (yy >= 0 && yy <= 79) ? 2000 + yy : 1900 + yy; // simple window
            try
            {
                var _ = new DateTime(year, mm, dd);
                return true;
            }
            catch
            {
                return false;
            }
        }

        static bool IsAllDigits(string s)
        {
            foreach (char c in s)
                if (c < '0' || c > '9') return false;
            return true;
        }

        // Optional: GTIN-14 check digit calculator (Mod10). Use if you build GTIN from the first 13 digits.
        // static char CalcGtin14CheckDigit(string first13Digits) { ... }
    }
}
  • Creați și rulați*
dotnet new console -n GS1_128_BarcodeExample -f net8.0
cd GS1_128_BarcodeExample
dotnet add package Aspose.BarCode
# Replace Program.cs with the code above, then:
dotnet run -- 1234567890123 260930 ABC123 SN-00987

Rezultatul PNG va fi scris în directorul dvs. de lucru.

Ghidul pas cu pas

Pasul 1: Înțelegerea bazelor GS1-128

GS1-128 este o simbolologie bazată pe cod 128** care codifică datele folosind Application Identifiers (AI). Fiecare AI definește ceea ce urmează (tipul și lungimea datelor).

În mod obișnuit:

  • (01) GTIN-14 (fixat 14 cifre; cu zeruri pe stânga, dacă mai scurt)
  • (17) Data expirării (** YYMMDD**)
  • (10) Batch/Lot (** lungime variabilă**)
  • (21) Serială (** lungime variabilă**)

FNC1 manipulare: Când treceți o linie citită de om cu paranteze (de exemplu, (01)1234...(10)LOTBiblioteca introduce în mod automat separatorii FNC1 în funcție de regulile GS1 - mai ales atunci când o AI de lungime variabilă** este urmată de o altă AI.

Pasul 2: Configurați setările codului de bar

Utilizați XDimension (de grosime a modulului), BarHeight și marginele pentru a echilibra densitatea de imprimare și toleranța scanerului. Pentru etichetele termice, XDimensionul ușor mai mare și zonele generoase de liniște îmbunătățesc rata de citire a primului pas.

generator.Parameters.Barcode.XDimension.Pixels = 3;
generator.Parameters.Barcode.BarHeight.Millimeters = 22f;
generator.Parameters.Barcode.LeftMargin.Millimeters = 4f;
generator.Parameters.Barcode.RightMargin.Millimeters = 4f;
generator.Parameters.Barcode.TopMargin.Millimeters = 2f;
generator.Parameters.Barcode.BottomMargin.Millimeters = 2f;

Pasul 3: Definiți identificatorii de aplicații (AI)

Păstrați GTIN la 14 cifre, data formatului este YYMMDD și mențineți AIs de lungime variabilă concise (evitați spațiile / chartele de control).

string gtin14 = gtinRaw.PadLeft(14, '0');
string gs1Text = $"(01){gtin14}(17){expYyMmDd}(10){batchLot}(21){serial}";

Pasul 4: Setarea textului cu codul de bar

Puteți configura textul GS1 în constructor sau mai târziu prin generator.CodeTextExemplul îl pune în constructor și arată cum să se repareze dacă este necesar.

Pasul 5: Customizează apariția

Decizia dacă ar trebui să afișeze textul codului ** citit de om** sub baraje (CodeLocation.Belowsau ștergeți-l dacă layout-ul etichetei imprimează text în altă parte.

generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.FontSize.Point = 8f;
generator.Parameters.Barcode.CodeTextParameters.Space.Millimeters = 1.0f;

Pasul 6: Creați și salvați

Împreună cu extinderea (.png, .jpg, .bmpPentru fluxurile de lucru etichetate, PNG este de obicei cel mai bun (fără pierdere).

generator.Save("GS1_128_ProductLabel.png");

Cuvânt cheie & Gotchas

  • Materia zonelor Quiet: În cazul în care un scaner se luptă, crește marginea stângă/dreapta și dimensiunea XD ușor.
  • ** Imprimante termice:** Vârstă / îmbrăcăminte poate blura baruri fine. XDimension (de exemplu, 3-4 px) și păstrați media curată.
  • GTIN check digit: Dacă construiți GTIN-uri, calculați / verificați Mod10 check digital pentru a preveni erorile de câmp.
  • Data fereastră: Fereastra YY din exemplu este simplistă; se potrivește cu regulile dvs. de afaceri (de exemplu, doar 20xx).
  • **Controlul versiunii: **Storează parametrii de dimensiune/marjă în configurare, astfel încât codurile de frână să poată fi reproduse pe tot parcursul mediului.

concluziile

Cu Aspose.BarCode pentru .NET, crearea codurilor de rambursare GS1-128** care respectă standardele este simplă. Definiți AIS-urile, validați formatele, parametrii de imprimare a tonului și exportați un PNG curat pregătit pentru etichetare. Utilizați exemplul complet de mai sus ca punct de plecare solid, apoi ajustați mărimea/marginele și regulile de validare pentru a vă potrivi imprimantei, materialelor și scanatorilor.

More in this category