En l’entorn empresarial d’avui ràpid, la tecnologia de codi de barra té un paper crucial en la simplificació de les operacions i la millora de la gestió de dades. Entre els diferents estàndards de codis de barres, GS1-128 s’utilitza àmpliament en totes les indústries per la seva versatilitat i capacitat per codificar informació detallada sobre el producte. Aquest guia t’aconsegueix mitjançant la generació dels codes de barreja GS1-128, amb Aspose.BarCode per a .NET - des del coneixement dels Identificadors de Aplicació (AIs) fins a la personalització de l’aparença i exportació d’imatges.

Exemple complet

Aquest exemple final a final:

  • Construeix una sèrie GS1 vàlida utilitzant els AIs comuns: (01) GTIN-14, (17) Expiry YYMMDD***, (2) Batch/Lot i (21) Serial*.
  • Validació de longituds/formats.
  • Rendera una imatge GS1-128 amb mida/marginatge amable a la impressió.
  • Conserva un arxiu PNG. Podeu fer valors de codi dur o passar-los a través d’args de línia de comanda.
// 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) { ... }
    }
}
  • Creació i funcionament *
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

La sortida de PNG s’escriurà al vostre directori de treball.

Guia de pas a pas

Pas 1: Comprendre els fonaments del GS1-128

GS1-128 és una simbologia basada en el codi 128** que codifica les dades utilitzant els identificadors d’aplicació (AI)**. Cada AI defineix el que segueix (tipus de dades i longitud).

Comuns dels EUA:

  • (01) GTIN-14 (fixat 14 dígits; palla amb zeros a l’esquerra si més curt)
  • (17) Data de finalització (** YYMMDD**)
  • (10) Batx/Lot (** longitud variable**)
  • (21) Sèrie (** longitud variable**)

FNC1 tractament: Quan passa una cadena de lectura humana amb paràmetres (per exemple, (01)1234...(10)LOTLa biblioteca insereix automàticament els separadors FNC1 per GS1 regles, especialment necessàries quan un AI de longitud variable es segueix per un altre AI.

Pas 2: Configureu la configuració de codi de barres

Utilitzeu XDimension (tanc de mòdul), BarHeight i margins per equilibrar la densitat d’impressió i la tolerància de l’escàner.Per a etiquetes tèrmiques, una xdimensió lleugerament superior i zones generoses de tranquil·litat milloren les taxes de lectura de primer 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;

Pas 3: Defineix els identificadors d’aplicació (AIs)

Pad GTIN a 14 dígits, format dates com YYMMDD i mantenir variable-llongada AIs concisa (evitar espais/barreres de control).

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

Pas 4: Configurar el codi de barres

Pots configurar el text GS1 en el constructor o més tard a través generator.CodeTextL’exemple el posa en el constructor i mostra com reassignar si és necessari.

Pas 5: Personalitzar l’aparença

Decideix si mostrar el text de codi lliure ** sota les barres (CodeLocation.Belowo suprimir-lo si el seu disseny d’etiquetes imprimeix text en un altre lloc.

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

Pas 6: Generar i salvar

En el cas de l’extensió (.png, .jpg, .bmpPer als fluxos de treball d’etiquetes, PNG és generalment el millor (sense pèrdues).

generator.Save("GS1_128_ProductLabel.png");

Tipus pràctics i Gotchas

  • Quiet zones matèria: Si un escanner lluita, augmentar les marges esquerra / dreta i XDimension lleugerament.
  • Impressors tèrmics: L’edat / la roba pot mossegar barres fines. XDimension (per exemple, 3-4 px) i mantenir els mitjans nets.
  • Digital de verificació de GTIN: Si construeixes GTINS, computa/verifica el número de comprovació de Mod10 per evitar errors de camp.
  • Data finestres: La finestra YY en l’exemple és simplista; alineat amb les seves regles de negoci (per exemple, només 20xx).
  • Control de la versió: Emmagatzema els paràmetres de mida / marge en configuració per tal que els barcodes siguin reproduïbles a través d’entorns.

Conclusió

Amb Aspose.BarCode per a .NET, la creació de codis de bar GS1-128** que compleixen els estàndards és senzilla. Defineix els teus AIs, valida els formats, els paràmetres d’impressió de tonyina i exporta un PNG net preparat per etiquetatge. Utilitza l’exemple complet anterior com a punt de partida sòlid, llavors ajusta les regles de mida/marges i validació per encaixar les teves impressores, materials i scanners.

More in this category