GS1 Sunrise 2027: Переход на двумерные штрих-коды

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

07 августа 2025

GS1 Sunrise 2027 — мировой проект по переходу от традиционных одномерных (1D) штрих-кодов EAN/UPC к двумерным (2D) штрих-кодам для повышения прозрачности, прослеживаемости и безопасности товаров. Планируется, что к концу 2027 года розничные, медицинские и другие предприятия по всему миру будут обязаны внедрить новые стандарты идентификации продукции на своих точках продаж (POS) и обслуживания (POC). Уже на этапе тестирования в 48 странах, охватывающих 88% мирового ВВП, инициатива Sunrise 2027 становится новой нормой глобальной торговли.

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



Что такое GS1 Sunrise 2027

Sunrise 2027 — это инициатива GS1, официально объявленная в 2020-х годах, с целью обеспечить, чтобы к 2027 году розничные и логистические системы по всему миру могли сканировать и интерпретировать 2D штрих-коды наряду с привычными 1D. Однако главная цель — заменить 1D-форматы более универсальными 2D, которые способны не только идентифицировать товар, но и передавать дополнительные данные — срок годности, номер партии, страну происхождения, сертификаты качества и прочее.


Почему переходит вся отрасль

Старый формат EAN/UPC оказался ограниченным:

2D штрих-коды, такие как GS1 DataMatrix и GS1 Digital Link QR, решают эти проблемы, позволяя:


Как это отразится на участниках рынка

Переход на 2D штрих-коды по инициативе GS1 затронет практически всех участников товарной цепочки — от производителей до разработчиков программного обеспечения. Эти изменения нельзя рассматривать как простой технический апгрейд — речь идёт о перестройке фундаментальных процессов в логистике, рознице и взаимодействии с потребителями.

Производственные компании окажутся в числе первых, кто ощутит влияние нового стандарта. Им предстоит адаптировать производственные линии и упаковочные процессы для печати новых штрих-кодов. Если раньше достаточно было нанести на упаковку линейный штрих-код с GTIN, то теперь в 2D-формат потребуется закладывать гораздо больше информации: срок годности, номер партии, сведения о составе, а иногда даже ссылку на цифровой сертификат или сайт. Всё это требует модернизации как оборудования, так и IT-инфраструктуры, обеспечивающей генерацию и управление новыми штрих-кодами.

Для розничных сетей и логистических операторов главным вызовом станет необходимость адаптации кассовых и складских сканирующих устройств. Хотя большинство современных сканеров уже поддерживают 2D штрих-коды, далеко не все они оптимизированы под стандарты GS1. Это означает, что потребуется не только обновление оборудования, но и доработка программного обеспечения, чтобы корректно распознавать и обрабатывать новые поля данных.

Разработчики программных решений, в том числе создатели систем учёта, ERP, кассовых приложений и мобильных решений, тоже должны подготовиться к изменению форматов штрих-кодирования. Требуется не просто добавить поддержку новых символьных систем — важно внедрить корректную интерпретацию структуры данных по стандартам GS1. Это включает обработку application identifiers (AI), парсинг вложенных полей и, в случае использования формата GS1 Digital Link, взаимодействие с внешними веб-сервисами. Здесь особенно важна точность распознавания, поскольку ошибка в трактовке данных может привести к сбоям в логистике, возвратам и даже юридическим последствиям.


Что делает 2D штрих-код особенным

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

В отличие от 1D штрих-кодов (например, EAN/UPC), которые могут содержать исключительно базовый товарный идентификатор (GTIN), 2D штрих-коды способны передавать целый набор параметров, необходимых для современных цепочек поставок и цифровых сервисов.

К основным преимуществам 2D штрих-кодов относятся:

Переход на новую систему штрих-кодирования стимулирует бизнес не только соответствовать стандартам, но и строить цифровые экосистемы, объединяющие физическую упаковку и онлайн-опыт.


Этапы внедрения GS1 Sunrise 2027

Информационный и добровольный этап

Распространение знаний, пилотные проекты, адаптация внутренних систем, тестирование двойной маркировки (1D + 2D). Компании получают время для модернизации и апробации технологий.


Обязательное внедрение по отраслям и регионам

Переход к обязательному использованию 2D штрих-кодов для определённых категорий продукции и территорий. Основное внимание — обновление POS-оборудования, обучение персонала, обеспечение совместимости цепочек поставок.


Полное соответствие и интеграция

До конца 2027 года все предприятия, попадающие под действие стандарта, должны полностью перейти на 2D штрих-коды — вплоть до замены классических EAN/UPC там, где это возможно. Постоянная актуализация стандартов и их поддержка.


Трудности и решения при переходе

Переход от привычных линейных штрих-кодов к двумерным форматам — это не только технологическое обновление, но и организационный вызов. Компании сталкиваются с рядом практических, технических и нормативных трудностей, особенно если в их инфраструктуре до сих пор преобладают устаревшие решения для сканирования, печати или обработки штрих-кодов.

Наиболее распространённые сложности включают:

Несмотря на эти вызовы, грамотное планирование и выбор правильных инструментов позволяют существенно упростить переход.

Ключевые решения, которые рекомендует применять на практике:

Переход к 2D штрих-кодам — это проект, требующий комплексного подхода, но при наличии современных инструментов и партнеров он становится не только выполнимым, но и выгодным с точки зрения перспектив развития бизнеса.


Как VintaSoft Barcode .NET SDK помогает бизнесу соответствовать GS1 Sunrise 2027

Продукт компании ВинтаСофтVintaSoft Barcode .NET SDK — решает задачи по быстрому и точному распознаванию как одномерных, так и двумерных штрих-кодов, включая штрих-коды DataMatrix и QR Code. Это позволяет компаниям:

Переход к GS1 Sunrise 2027 способствует цифровизации, прозрачности и безопасности современной цепи поставок. Важно уже сейчас готовиться к изменениям, модернизировать инструменты маркировки и распознавания — инвестируя в решения, такие как VintaSoft Barcode .NET SDK для эффективного считывания и обработки новых 2D штрих-кодов.


Вот C# код, который демонстрирует как сгенерировать штрих-код GS1 Digital Link и распознать сгенерированный штрих-код.
using System;
using System.Text;

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

/// <summary>
/// Test that shows how to encode the barcode data in GS1 Digital Link format,
/// create image with GS1 Digital Link barcode,
/// read GS1 Digital Link barcode from image and print data stored in GS1 format.
/// </summary>
class GS1DigitalLinkExample
{

    /// <summary>
    /// Runs the test (available barcode types QR, DataMatrix).
    /// </summary>
    public static void TestGS1DigitalLink(BarcodeType digitalLinkBarcodeType)
    {
        // GS1 Digital Link barcode
        GS1DigitalLinkBarcodeSymbologySubset barcodeSubset;
        if (digitalLinkBarcodeType == BarcodeType.QR)
            barcodeSubset = BarcodeSymbologySubsets.GS1DigitalLinkQR;
        else if (digitalLinkBarcodeType == BarcodeType.DataMatrix)
            barcodeSubset = BarcodeSymbologySubsets.GS1DigitalLinkDataMatrix;
        else
            throw new NotSupportedException();

        // 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");
        // create GS1 value item
        GS1DigitalLinkValueItem gs1DigitalLinkValue = new GS1DigitalLinkValueItem(new GS1DigitalLink("vintasoft.com", aiValues));

        // 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;

            // encode GS1 Digital Link barcode
            barcodeSubset.Encode(gs1DigitalLinkValue, writer.Settings);

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

                // read barcode with GS1 value

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

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

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

                    // gets GS1 value from barcode value
                    gs1DigitalLinkValue = (GS1DigitalLinkValueItem)(infos[0].ValueItems[0]);

                    // print barcode type
                    Console.WriteLine("Barcode Type: {0}", infos[0].BarcodeType);
                    Console.WriteLine();

                    // print GS1 Digital Link URI value
                    Console.WriteLine("GS1 Digital Link URI:\n{0}", gs1DigitalLinkValue.DigitalLink.DigitalLinkUri);
                    Console.WriteLine();

                    // gets a GS1 Application identifiers from barcode value
                    aiValues = gs1DigitalLinkValue.ApplicationIdentifierValues;

                    StringBuilder 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());
                }
            }
        }
    }
}