Application Identifiers 01, 21, 91, 92, 93 простыми словами
Код маркировки — это набор полей, каждое из которых начинается с короткого числа — идентификатора применения (Application Identifier, AI). AI говорит, что идёт дальше: код товара, серийный номер или код проверки. В большинстве кодов «Честного знака» встречаются пять AI: 01 и 21 — всегда, дальше либо 91 и 92, либо 93.
Сводная таблица
| AI | Что это | Длина | Кто задаёт | GS после поля |
|---|---|---|---|---|
| 01 | GTIN — код товара | 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; продукт не связан с их владельцами и ими не сертифицирован.