Dans l’environnement d’affaires rapide de nos jours, la technologie de code bar joue un rôle crucial dans la rationalisation des opérations et le renforcement de la gestion des données. Parmi les différents normes de codes bar, GS1-128 est largement utilisé dans les industries pour sa polyvalence et sa capacité à coder des informations détaillées sur le produit. Ce guide vous guide à travers la génération de chiffres bar avec Aspose.BarCode pour .NET-de la compréhension des Application Identifiers (AIs) à la personnalisation de l’apparition et des images d’exportation.

Exemple complet

Un exemple de fin à fin :

  • Il crée une chaîne GS1 valide en utilisant des AIs communs : (01) GTIN-14, (27) Expiry YYMMDD**,(10) Batch/Lot et 21) Serial.
  • Vérification des longs/formats.
  • Render une image GS1-128 avec des dimensions/marges imprimables.
  • Économisez un fichier PNG. Vous pouvez les valeurs de code dur ou les passer par l’intermédiaire des args de ligne de commande.
// 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) { ... }
    }
}
  • Création et fonctionnement *
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 sortie de PNG sera écrite dans votre catalogue de travail.

Guide étape par étape

Étape 1 : Comprendre les bases du GS1-128

GS1-128 est une symbologie ** basée sur le code 128** qui encode les données en utilisant ** Application Identifiers (AIs)**. Chaque AI définit ce qui suit (type de données et longueur).

Les plus communs :

  • (01) GTIN-14 (fixe 14 chiffres; coupe avec des zéro à gauche si plus courte)
  • (17) Date d’expiration (** YYMMDD**)
  • (10) Batch/Lot (** longueur variable**)
  • (21) Série (** longueur variable**)

FNC1 manipulation: Lorsque vous passez une chaîne humaine lisible avec des parenthèses (par exemple, (01)1234...(10)LOT), la bibliothèque insère automatiquement les séparateurs FNC1 selon les règles GS1 – particulièrement nécessaire lorsqu’une ** AI variable de longueur** est suivi par une autre AI.

Étape 2 : Configurer les paramètres de code bar

Utilisez XDimension (début de module), BarHeight et margin pour équilibrer la densité d’impression et la tolérance du scanner. Pour les étiquettes thermiques, la XDimission légèrement plus élevée et les zones tranquilles généreuses améliorent les taux de lecture au premier 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;

Étape 3 : Définir les identifiants d’application (AIs)

Pad GTIN à 14 chiffres, format date en YYMMDD et maintient les AIs de longueur variable concise (évitez les espaces/charges de contrôle).

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

Étape 4 : Créer un code bar

Vous pouvez définir le texte GS1 dans le constructeur ou plus tard via generator.CodeTextL’exemple le place dans le constructeur et montre comment réassigner si nécessaire.

Étape 5 : personnaliser l’apparence

Déterminez si vous afficherez le ** texte de code à lire par l’homme** sous les barres (CodeLocation.Belowou supprimez-le si votre layout d’étiquette imprime le texte ailleurs.

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

Étape 6 : Gérer et sauvegarder

Réserver par extension (.png, .jpg, .bmpPour les flux de travail d’étiquette, PNG est généralement le meilleur (sans perte).

generator.Save("GS1_128_ProductLabel.png");

Conseils pratiques & Gotchas

  • Quiet zones matériau: Si un scanner lutte, augmenter légèrement les marges gauche/droite et XDimension.
  • ** Imprimante thermique:** L’âge / le vêtement peut blasser des barres fines. XDimension (par exemple, 3 à 4 px) et garder les médias propres.
  • GTIN : Si vous construisez des GTIN, comptez/verifiez le numéro de contrôle Mod10 pour éviter les erreurs de champ.
  • Date windows: La fenêtre YY dans l’exemple est simplifiée; conforme à vos règles d’affaires (par exemple, seulement 20xx).
  • ** Contrôle de version:** Entrez les paramètres de taille/marge en configuration afin que les codes de barre soient reproduisables dans les environnements.

Conclusion

Avec Aspose.BarCode pour .NET, créer des codes-barres GS1-128** conformes aux normes est simple. Définissez vos AIs, validez les formats, les paramètres d’impression de ton et exportez un PNG propre prêt à l’étiquetage. Utilisez l’exemple complet ci-dessus comme un point de départ solide, puis ajuster les règles de taille/marge et de validation pour correspondre à vos imprimantes, matériaux et scanners.

More in this category