Анализ идентификаторов приложений GS1 с помощью VintaSoft Barcode .NET SDK

Категория: Штрих-коды.NET

17 июня 2025

В современной логистике, розничной торговле, медицине и производстве стандарты GS1, включающие идентификаторы приложений (Application Identifiers, AI), стали универсальным инструментом структурирования данных в штрих-кодах. Для эффективной работы с такими кодами критично не просто считать строку символов, но и правильно разобрать содержимое — выделить каждый идентификатор приложения и ассоциированные с ним данные. Программный продукт VintaSoft Barcode .NET SDK предоставляет мощный инструментарий для анализа и структурирования информации в соответствии со стандартом GS1.

Что такое идентификаторы приложений GS1 и зачем их анализировать

Идентификаторы приложений GS1 — это краткие цифровые префиксы (обычно из 2–4 цифр), размещаемые в штрих-коде перед фактическими данными. Каждый такой префикс однозначно указывает на тип информации, например, глобальный номер товара (GTIN), дату выпуска, срок годности, вес, серийный номер и т.п. Правильная интерпретация этих идентификаторов позволяет автоматически извлекать из штрих-кода структурированную, однозначную информацию для учета, отслеживания и автоматизации процессов на предприятии.

Какие форматы штрих-кодов поддерживают идентификаторы GS1

Стандарты GS1 с идентификаторами приложений используются во множестве штрих-кодовых символьных систем:

Именно эти форматы чаще всего используются крупными предприятиями по всему миру для обеспечения сквозной прослеживаемости и автоматизации.

Как работает анализ GS1 идентификаторов с помощью VintaSoft Barcode .NET SDK

Программный комплекс VintaSoft Barcode .NET SDK позволяет не только быстро считывать любые типы штрих-кодов, но и осуществлять автоматический разбор строк данных в соответствии со стандартом GS1.

Основные этапы анализа:

Применение и преимущества для бизнеса

Анализ идентификаторов приложений GS1 с помощью VintaSoft Barcode .NET SDK открывает для компаний новые возможности автоматизации и контроля. Решение легко интегрируется в цепочку бизнес-процессов, облегчает учет движения товаров и обеспечивает высокий уровень достоверности данных.

Среди практических преимуществ:

Использование такого инструмента помогает бизнесу не только снизить издержки, но и повысить качество сервисов, ускорить обработку товаров, сделать процессы более прозрачными и современными.

Заключение

Анализ и парсинг идентификаторов приложений GS1 — неотъемлемая часть современных процессов автоматизации и учета в ритейле, логистике и здравоохранении.

VintaSoft Barcode .NET SDK предоставляет универсальное, гибкое и высокопроизводительное решение для задач сканирования и анализа сложных штрих-кодов, соответствующих мировым стандартам GS1. Благодаря поддержке широкого спектра форматов, автоматическому разбору структурированных данных и простой интеграции в существующие системы, решения ВинтаСофт помогают компаниям повышать прозрачность процессов и снижать операционные издержки.

Для получения дополнительной информации о возможностях VintaSoft Barcode .NET SDK и примеров интеграции обращайтесь на официальный сайт ВинтаСофт или в службу поддержки компании.


Вот C# код, который демонстрирует как сгенерировать изображение Code128 штрих-кода с GS1 информацией (GS1-128) и распознать GS1-128 штрих-код в сгенерированном изображении:
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());
                }
            }
        }
    }
}