In de hedendaagse snelle bedrijfsomgeving speelt barcodetechnologie een cruciale rol bij het vergemakkelijken van de operaties en verbeteren van het beheer van gegevens. Onder de verschillende normen voor barcodes, GS1-128 wordt veel gebruikt in alle industrieën voor de versatiliteit en het vermogen om gedetailleerde productinformatie te coderen. Deze gids leid je door het generëren van GS1-128-barcoden met Aspose.BarCode voor .NET-van het begrijpen van Application Identifiers (AIs) tot het aanpassen van uiterlijk en exporteren van afbeeldingen.

Volledige voorbeeld

Dit eindelijk voorbeeld:

  • Gebouwt een geldig GS1-lijn met gebruikmaking van gemeenschappelijke AIs: (01) GTIN-14, (17) Expiry YYMMDD* en (21) Batch/Lot*.
  • Valideert lengtes / formaten.
  • Render een GS1-128 afbeelding met drukvriendelijke afmetingen/margines.
  • Speel een PNG bestand. U kunt harde-code waarden of ze doorgeven via command-line args.
// 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) { ... }
    }
}
  • Build & Run *
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

De PNG-uitgang zal in uw werkdirectuur worden geschreven.

Step-by-step gids

Stap 1: Begrijpen GS1-128 Basics

GS1-128 is een code 128-based symbool die gegevens codert met behulp van Application Identifiers (AIs).

Gemeenschappelijke AIs:

  • (01) GTIN-14 (fixed 14 digits; pad met zeros aan de linkerkant als korter)
  • (17) Datum van beëindiging (** YYMMDD**)
  • (10) Batch/Lot (** variabele lengte**)
  • (21) Serial (** variabele lengte**)

FNC1-behandeling: Wanneer u een menselijk leesbare lijn doorbrengt met parentheses (bijv. (01)1234...(10)LOT), de bibliotheek voert automatisch FNC1 separatoren op GS1 regels - vooral nodig wanneer een variabele lengte AI wordt gevolgd door een andere AI.

Stap 2: Configureer barcode instellingen

Gebruik XDimension (module dikte), BarHeight en margins om de druk dichtheid en scanner tolerantie te balanceren.

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;

Stap 3: Definieer Application Identifiers (AIs)

Pad GTIN naar 14 cijfers, formatdates als YYMMDD en houd variabele lengte AIs concise (vermijd ruimtes/controlchars).

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

Stap 4: Set barcode tekst

U kunt de GS1 tekst instellen in de constructor of later via generator.CodeTextHet voorbeeld zet het in de constructeur en laat zien hoe het moet worden hersteld indien nodig.

Stap 5: aangepaste uiterlijk

Kies of u de human-readable code tekst onder de bars (CodeLocation.Below) of het verwijderen als uw etiketlijst tekst elders afdrukken.

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

Stap 6: Genereren en besparen

De uitbreiding (.png, .jpg, .bmpVoor label workflows is PNG meestal het beste (lossless).

generator.Save("GS1_128_ProductLabel.png");

Praktische tips & Gotchas

  • Quiet zones matter: Als een scanner strijdt, verhoog de linker/rechter marge en XDimension enigszins.
  • Thermische printers: Age/wear kan fijne bars bluren. XDimension (bijvoorbeeld 3-4 px) en houden de media schoon.
  • GTIN check digit: Als u GTIN’s bouwt, berekent/verifieert u het Mod10 check-digit om veldfouten te voorkomen.
  • Date windows: Het YY-venster in het voorbeeld is eenvoudig; in overeenstemming met uw zakelijke regels (bijvoorbeeld, slechts 20xx).
  • Versiebeheersing: Speel de grootte/margeparameters in config zodat de barcodes over omgevingen kunnen worden herhaald.

Conclusie

Met Aspose.BarCode voor .NET, het creëren van normen-compliant GS1-128 barcodes is eenvoudig. Definieer uw AIs, valideren formaten, tune print parameters, en exporteer een schoon PNG klaar voor etikettering. Gebruik het volledige voorbeeld hierboven als een solide startpunt, vervolgens aanpassen van de grootte/margen en validatie regels om uw printers, materialen en scanners te passen.

More in this category