← Статьи

Application Identifiers 01, 21, 91, 92, 93 простыми словами

Код маркировки — это набор полей, каждое из которых начинается с короткого числа — идентификатора применения (Application Identifier, AI). AI говорит, что идёт дальше: код товара, серийный номер или код проверки. В большинстве кодов «Честного знака» встречаются пять AI: 01 и 21 — всегда, дальше либо 91 и 92, либо 93.

Сводная таблица

AIЧто этоДлинаКто задаётGS после поля
01GTIN — код товара14 цифрПроизводитель, через каталог товаровНе нужен
21Серийный номер упаковки6 или 13 символов — по товарной группеВыдаётся вместе с кодом маркировкиНужен
91Идентификатор ключа проверки4 символаОператорНужен
92Код проверки («криптохвост»)44 символаОператорОбычно последнее поле
93Короткий код проверки4 символаОператорТолько если дальше есть поле

01 — что за товар

GTIN — номер товарной позиции, одинаковый для всех пачек одного продукта. В коде он всегда 14-значный: привычный 13-значный штрихкод EAN-13 дополняется нулём слева. Последняя цифра — контрольная, её можно проверить без сети (алгоритм — в статье о проверке кода).

21 — какая именно пачка

Серийный номер делает код уникальным: пара «GTIN + серийный номер» не повторяется никогда. Именно эта пара — код идентификации, по которому система следит за пачкой от завода до кассы.

Длина зависит от товарной группы: 13 символов у лекарств и БАД, 6 — у молочной продукции и косметики. В части групп первый символ — код страны ЕАЭС, для России это 5 (БАД, косметика). В серийном номере бывают цифры, латинские буквы обоих регистров и спецсимволы, поэтому сравнивайте его с учётом регистра.

91 и 92 — длинная защита

Поля 91 и 92 подтверждают, что код выпущен оператором, а не придуман. 92 — код проверки длиной 44 символа, 91 — номер ключа, которым этот код проверяется. Вместе они позволяют проверить код на кассе без связи с сервером.

Цена офлайн-проверки — размер: код лекарства с этими полями — 83 символа без учёта разделителей (формирование кода ЛП), и DataMatrix для него заметно крупнее.

93 — короткий код проверки

Вместо пары 91 + 92 многие товарные группы используют одно поле 93 из 4 символов. Код становится вдвое-втрое короче и помещается на маленькую упаковку, но проверить его можно только онлайн. У молочной продукции такой код — единственный вариант, у БАД и косметики — запасной, когда длинный код не помещается на упаковку.

Криптохвост: что это и почему его нельзя трогать

«Криптохвостом» на производстве называют криптографическую часть кода — поля 91 и 92 или поле 93. Первые две части кода, GTIN и серийный номер, говорят, что это за пачка; криптохвост подтверждает, что код выпустил оператор, а не кто-то другой. Без него строка — просто номер товара, а не код маркировки.

Криптохвост не вычисляется на заводе. Оператор формирует его вместе с серийным номером, когда выдаёт коды по заказу через станцию управления заказами (СУЗ), и производитель получает каждый код целой строкой. Подобрать или пересчитать криптохвост без ключей оператора нельзя — поэтому и подлинность кода проверяет только оператор.

Отсюда главное правило: печатать код ровно в том виде, в каком он получен. На линии криптохвост чаще всего портят так:

  • Обрезают. Поле в базе, столбец в таблице или переменная в шаблоне принтера короче строки кода — 92 теряет последние символы.
  • Искажают символы. В поле 92 бывают +, / и =, а во всех полях — буквы обоих регистров. Их ломают перекодировка, экранирование в CSV или XML, «исправление» регистра и автозамена.
  • Теряют GS перед ним. Без разделителя после серийного номера касса не найдёт, где начинается 91 или 93, — подробно в статье про разделитель GS.

Без сети на линии можно проверить форму криптохвоста: длины полей (91 — 4 символа, 92 — 44, 93 — 4), разделители и то, что напечатанная строка совпадает с выданной оператором для этого задания. Подлинность и статус кода проверяет только оператор — на кассе, в приложении «Честный ЗНАК» или через его API.

Длинный и короткий код рядом

Длинный: 01 + 21 + 91 + 92Короткий: 01 + 21 + 93
Длина (серийный номер 6 / 13 символов)76 / 83 символа30 / 37 символов
Размер DataMatrix при ASCII-кодировании36×36 модулей20×20 или 22×22 модуля
Проверка на кассеОфлайн и онлайнТолько онлайн
Разделители GSПосле 21 и после 91После 21

Другие AI, которые встречаются

Некоторые группы добавляют поля после кода проверки. Например, молочная продукция может нести вес в поле 3103 — 6 цифр, килограммы с тремя знаками после запятой, и тогда перед ним нужен GS (состав кода молочной продукции). Парсер должен спокойно принимать такие поля, а не считать код ошибочным.

91, 92 и 93 в стандарте GS1 — «внутренние» идентификаторы, смысл которых определяет не GS1, а система, использующая код. Поэтому универсальные GS1-парсеры показывают их как «внутренние данные компании», а длины полей нужно брать из требований оператора для своей товарной группы.

Попробовать

Библиотеки libscanner читают и создают коды «Честного знака» с любым набором этих полей. Пакет для Python — pip install libscanner-dmr (Windows x64, Linux x86-64, ARM64, ARMv7), проверка по фото — онлайн-сканер, исходники и примеры — на GitHub.

«Честный знак» — товарный знак ООО «Оператор-ЦРПТ», «GS1» — GS1 AISBL; продукт не связан с их владельцами и ими не сертифицирован.