В современной логистике, розничной торговле, медицине и производстве стандарты GS1, включающие идентификаторы приложений (Application Identifiers, AI), стали универсальным инструментом структурирования данных в штрих-кодах. Для эффективной работы с такими кодами критично не просто считать строку символов, но и правильно разобрать содержимое — выделить каждый идентификатор приложения и ассоциированные с ним данные. Программный продукт VintaSoft Barcode .NET SDK предоставляет мощный инструментарий для анализа и структурирования информации в соответствии со стандартом GS1.
Что такое идентификаторы приложений GS1 и зачем их анализировать
Идентификаторы приложений GS1 — это краткие цифровые префиксы (обычно из 2–4 цифр), размещаемые в штрих-коде перед фактическими данными. Каждый такой префикс однозначно указывает на тип информации, например, глобальный номер товара (GTIN), дату выпуска, срок годности, вес, серийный номер и т.п. Правильная интерпретация этих идентификаторов позволяет автоматически извлекать из штрих-кода структурированную, однозначную информацию для учета, отслеживания и автоматизации процессов на предприятии.
Какие форматы штрих-кодов поддерживают идентификаторы GS1
Стандарты GS1 с идентификаторами приложений используются во множестве штрих-кодовых символьных систем:
- GS1-128 — применяется в логистике и на складах для маркировки упаковок, паллет, транспортных этикеток;
- GS1 Data Matrix — наиболее востребован в фармацевтике и медицине для идентификации лекарств, компонентов, медицинских приборов;
- GS1 QR Code — универсальный формат, подходящий для быстрой передачи расширенной информации или онлайн-проверки;
- GS1 DataBar — часто встречается в ритейле и на упаковках свежих продуктов для фиксации веса, даты годности, цены.
Именно эти форматы чаще всего используются крупными предприятиями по всему миру для обеспечения сквозной прослеживаемости и автоматизации.
Как работает анализ GS1 идентификаторов с помощью VintaSoft Barcode .NET SDK
Программный комплекс VintaSoft Barcode .NET SDK позволяет не только быстро считывать любые типы штрих-кодов, но и осуществлять автоматический разбор строк данных в соответствии со стандартом GS1.
Основные этапы анализа:
- Распознавание и определение формата штрих-кода. SDK автоматически определяет, относится ли считанный штрих-код к одному из стандартов GS1 и поддерживает ли работу с идентификаторами приложений.
- Поиск идентификаторов и разметка данных. После успешного декодирования сканер использует внутренние правила парсинга стандартов GS1 и последовательно разбивает считанную строку на отдельные секции: выделяет каждый идентификатор приложения и связывает его с соответствующим содержимым (числом, датой, строкой).
- Формирование структурированного результата. В результате анализа SDK возвращает не единую строку, а развернутый структурированный объект, где каждому идентификатору соответствует его значение и описание. Такой подход дает приложениям или бизнес-системам гибкий и однозначный доступ к данным без ручного разбора.
- Гибкая обработка разных комбинаций идентификаторов. Поддерживается работа со сложными штрих-кодами, содержащими наборы разных AI: например, одновременное извлечение GTIN, срока годности, веса, серийного номера и другой информации.
Применение и преимущества для бизнеса
Анализ идентификаторов приложений 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());
}
}
}
}
}