Analyze GS1 application identifiers using VintaSoft Barcode .NET SDK

Blog category: Barcode.NET

June 17, 2025

In modern logistics, retail, medicine and manufacturing, GS1 standards, including Application Identifiers (AI), have become a universal tool for structuring data in barcodes. To work effectively with such codes, it is critical not only to read a string of characters, but also to correctly parse the content - to select each application identifier and the data associated with it. The VintaSoft Barcode .NET SDK software product provides a powerful tool for analyzing and structuring information in accordance with GS1 standard.

What are GS1 application identifiers and why analyze them

GS1 Application Identifiers are short numeric prefixes (usually 2-4 digits) placed in the barcode before the actual data. Each prefix uniquely identifies the type of information, such as a Global Trade Item Number (GTIN), production date, expiration date, weight, serial number, etc. Correct interpretation of these identifiers allows for the automatic extraction of structured, unambiguous information from the barcode for accounting, tracking, and automation of enterprise processes.

What barcode formats do GS1 identifiers support

GS1 standards with application identifiers are used in many barcode symbol systems:

These are the formats most often used by large enterprises around the world to ensure end-to-end traceability and automation.

How GS1 identifiers analysis works with VintaSoft Barcode .NET SDK

The VintaSoft Barcode .NET SDK software package allows not only to quickly read any type of barcodes, but also to automatically parse data lines in accordance with the GS1 standard.

Main stages of analysis:

Application and benefits for business

Analysis of GS1 application identifiers with VintaSoft Barcode .NET SDK opens up new automation and control opportunities for companies. The solution is easily integrated into the business process chain, facilitates the accounting of goods movement and ensures a high level of data reliability.

Among the practical advantages:

Using such a tool helps businesses not only reduce costs, but also improve the quality of services, speed up the processing of goods, and make processes more transparent and modern.

Conclusion

Analysis and parsing of GS1 application identifiers is an integral part of modern automation and accounting processes in retail, logistics, and healthcare.

VintaSoft Barcode .NET SDK provides a universal, flexible, and high-performance solution for scanning and analyzing complex barcodes that comply with GS1 global standards. With support for a wide range of formats, automatic parsing of structured data and easy integration into existing systems, VintaSoft solutions help companies increase process transparency and reduce operational costs.

For more information on the capabilities of VintaSoft Barcode .NET SDK and integration examples, please visit VintaSoft official website or contact the company's support service.


Here is a C# code that demonstrates how to generate a Code128 barcode image with GS1 information (GS1-128) and recognize a GS1-128 barcode in the generated image:
using System;
using System.Text;

using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;
using Vintasoft.Barcode.GS1;
using Vintasoft.Barcode.SymbologySubsets;
using Vintasoft.Imaging;

/// <summary>
/// Test that shows how to encode the barcode data in GS1 format using the GS1Codec class,
/// create image with GS1-128 barcode,
/// read GS1-128 barcode from image and
/// parse data stored in GS1 format.
/// </summary>
class GS1CodecExample
{

    /// <summary>
    /// Runs the test.
    /// </summary>
    public static void TestGS1Codec()
    {
        bool valueVisible = true;

        // form the GS1 Application identifiers

        GS1ApplicationIdentifierValue[] aiValues = new GS1ApplicationIdentifierValue[4];
        GS1ApplicationIdentifier ai;
        // 01 - Global Trade Item Number
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("01");
        aiValues[0] = new GS1ApplicationIdentifierValue(ai, "0123456789123C");
        // 310 - Net weight, kilograms
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("310");
        aiValues[1] = new GS1ApplicationIdentifierValue(ai, "0012.55");
        // 30 - Count of Items
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("30");
        aiValues[2] = new GS1ApplicationIdentifierValue(ai, "10");
        // 90 - Company Internal Information
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("90");
        aiValues[3] = new GS1ApplicationIdentifierValue(ai, "ABCabc12345");

        // get GS1 printable value
        StringBuilder printableValue = new StringBuilder();
        foreach (GS1ApplicationIdentifierValue value in aiValues)
            printableValue.Append(value);


        // create the barcode writer
        using (BarcodeWriter writer = new BarcodeWriter())
        {
            // specify that writer must create output image as 24-bpp image
            writer.Settings.PixelFormat = BarcodeImagePixelFormat.Bgr24;

            // specify that writer must generate Code128 barcode
            writer.Settings.Barcode = BarcodeType.Code128;

            // encode GS1 value in GS1-128 symbology
            writer.Settings.Value = GS1Codec.GS1_128.Encode(aiValues, writer.Settings);
            // set printable value
            if (valueVisible)
            {
                writer.Settings.ValueVisible = true;
                writer.Settings.PrintableValue = printableValue.ToString();
            }
            else
            {
                writer.Settings.ValueVisible = false;
            }

            // create image with barcode
            using (VintasoftBitmap barcodeImage = writer.GetBarcodeAsVintasoftBitmap())
            {
                // delete aiValues array
                aiValues = null;

                // create barcode reader
                using (BarcodeReader reader = new BarcodeReader())
                {
                    // specify that reader must search for GS1-128 barcodes only

                    reader.Settings.ScanBarcodeTypes = BarcodeType.None;
                    reader.Settings.ScanBarcodeSubsets.Add(BarcodeSymbologySubsets.GS1_128);

                    // read barcode from image
                    IBarcodeInfo[] infos = reader.ReadBarcodes(barcodeImage);

                    // gets a GS1 Application identifiers from barcode value
                    aiValues = ((GS1BarcodeInfo)infos[0]).ApplicationIdentifierValues;

                    printableValue = new StringBuilder();

                    // print Application identifiers values
                    for (int i = 0; i < aiValues.Length; i++)
                    {
                        GS1ApplicationIdentifierValue aiValue = aiValues[i];
                        ai = aiValue.ApplicationIdentifier;
                        Console.WriteLine(string.Format("[{0}] {1}", i + 1, aiValue));
                        Console.WriteLine(string.Format("Application identifier   : {0}", ai.ApplicationIdentifier));
                        Console.WriteLine(string.Format("Value                    : {0}", aiValue.Value));
                        Console.WriteLine(string.Format("Data title               : {0}", ai.DataTitle));
                        Console.WriteLine(string.Format("Data content             : {0}", ai.DataContent));
                        Console.WriteLine(string.Format("Format                   : {0}", ai.Format));
                        Console.WriteLine(string.Format("Is contains decimal point: {0}", ai.IsContainsDecimalPoint));
                        Console.WriteLine(string.Format("Is variable length       : {0}", ai.IsVariableLength));
                        Console.WriteLine();
                        printableValue.Append(aiValue.ToString());
                    }

                    // print GS1 printable value
                    Console.WriteLine("Printable GS1 value: " + printableValue.ToString());
                }
            }
        }
    }
}