Ага, попались! Вы тоже путаете понятия. Это же DataMatrix! И говорить будем именно о нём, а не о «куаркодах», в которых нам подсовывают рекламу или рецепты... Хотя логика такой путаницы вполне понятна: видишь на упаковке маленький квадратик, внутри чёрные и белые кубики — и думаешь, что это QR-код. А это не он!
На пачке йогурта, бутылке воды или упаковке молока сегодня мы видим именно DataMatrix. На кассе его сканируют, иногда сканер не может поймать код с первого раза, кассир поворачивает упаковку, раздаётся «пик» — и товар отправляется дальше.
Со стороны легко представить, что внутри этого квадрата спрятано вообще всё: кто произвёл товар, где, когда, из чего, в какую машину его загрузили, в каком магазине он оказался и когда должен испортиться.
Но если взять DataMatrix и посмотреть, что в нём действительно закодировано, картина окажется интереснее. И информации непосредственно внутри кода будет гораздо меньше, чем можно ожидать.
Сначала важное: DataMatrix — это не ссылка и не маленькая база данных
Мы привыкли к QR-кодам: наводишь камеру телефона — открывается сайт, меню ресторана или страница оплаты. Поэтому DataMatrix легко воспринимать примерно так же. Но сам по себе DataMatrix — это способ записать последовательность символов в компактном двумерном коде. Сканер считывает рисунок и превращает его обратно в цифры, буквы и специальные символы.
А уже дальше программа должна понять, что означает получившаяся строка. Для маркированного товара отдельные фрагменты этой строки имеют своё назначение. Чтобы их различать, используются так называемые идентификаторы применения GS1 — Application Identifiers, или AI.
Проще всего посмотреть на конкретном примере
Возьмём обычную пачку молочной продукции. В коде маркировки можно встретить, например, такую структуру: 01 — GTIN, 21 — индивидуальный серийный номер, 93 — код проверки. Цифры 01, 21 и 93 здесь работают примерно как подписи к следующим за ними данным: они сообщают системе, что именно она сейчас читает.
Начнём с 01
После него идёт 14-значный GTIN — глобальный номер товарной позиции. Он позволяет определить, что это вообще за товар. Условно говоря, по этой части система понимает: перед ней йогурт определённого производителя, определённого вида и в определённой упаковке.
Два одинаковых йогурта для системы всё равно разные
После идентификатора 21 записывается серийный номер конкретного экземпляра. И вот именно он у двух одинаковых пачек будет разным.
Например, вы видите полке две упаковки йогурта. У них один производитель, один вкус, одинаковый вес и одинаковая упаковка. Для покупателя между ними практически нет разницы. Для информационной системы — есть.
У одной пачки может быть серийный номер X7K2P9, у другой — M4T8Q1. GTIN отвечает на вопрос «что это?», а серийный номер — «какой именно экземпляр?». Именно эта комбинация позволяет перейти от учёта вида «у нас есть 100 пачек такого йогурта» к учёту конкретных пачек.
То есть DataMatrix нужен не просто для того, чтобы ещё раз написать на упаковке название товара в машинном виде. Он позволяет отличить одну физическую единицу от другой.
А что такое 93?
Ещё один элемент, который можно встретить в коде маркировки молочной продукции, — идентификатор 93. После него располагается код проверки. Он нужен для проверки КМ и помогает системе отличать корректно сформированные коды от произвольных комбинаций символов.
И здесь возникает интересный момент. Если мы знаем GTIN какого-нибудь йогурта, это ещё не значит, что теперь можно самостоятельно напечатать сколько угодно DataMatrix-кодов для таких же пачек. Одного номера товара недостаточно: экземпляр должен иметь свой уникальный серийный номер и корректные проверочные данные.
Поэтому просто нарисовать квадрат, внешне похожий на DataMatrix, — совсем не то же самое, что получить действующий код маркировки.
Значит, внутри есть ещё дата производства и срок годности?
Не обязательно. И это, пожалуй, одна из самых интересных особенностей всей системы. Когда после сканирования на экране появляется информация о товаре, легко решить, что сканер только что извлёк её непосредственно из DataMatrix. Но часть сведений программа может получить уже после того, как поняла, какой именно экземпляр перед ней.
Сам КМ в таком случае работает скорее как уникальный идентификатор, по которому информационная система находит связанную с товаром информацию. При этом структура данных зависит от товарной группы и конкретного сценария маркировки. Нельзя взять один код маркировки и сказать: «Вот эти поля обязательно находятся внутри каждого DataMatrix».
Например, стандарт GS1 позволяет использовать разные идентификаторы применения. 10 может обозначать номер партии, 17 — срок годности. Для некоторых товаров переменного веса применяются отдельные идентификаторы для указания массы.
Но наличие таких идентификаторов в стандарте ещё не означает, что каждый DataMatrix на любом маркированном товаре содержит все эти данные. Поэтому универсального списка «вот что всегда зашифровано в DataMatrix» не существует.
А сканер тогда что делает?
У него гораздо более скромная задача, чем иногда кажется. Сканер видит двумерный рисунок, распознаёт расположение чёрных и белых модулей и декодирует их обратно в последовательность символов. Например, получает длинную строку, внутри которой встречаются уже знакомые нам 01, 21, 93 и данные после них.
На этом магия самого DataMatrix практически заканчивается. Дальше начинается работа программного обеспечения: оно должно разобрать строку, понять назначение её частей и решить, что делать с полученными данными.
Поэтому один и тот же код можно физически считать разными устройствами. Вопрос не только в том, способен ли сканер увидеть квадрат, но и в том, что произойдёт с полученной строкой после считывания.
И ещё один неожиданный факт про цифры на упаковке
Раз уж мы заглянули внутрь кодов, стоит вспомнить ещё один популярный миф. Иногда первые цифры товарного номера воспринимают как указание на страну, где товар был произведён. Например: увидели определённый префикс — значит, продукт точно изготовлен в этой стране.
Это не совсем так. Префикс связан с организацией GS1, которая выделила компании соответствующий диапазон номеров. Сам по себе он не является надёжным доказательством страны производства конкретного товара.
Поэтому определить происхождение продукта только по первым цифрам товарного номера не получится.
Так что же всё-таки находится в маленьком квадрате?
Не полная биография товара. DataMatrix не обязан хранить внутри себя рассказ о том, где товар произвели, на какой машине привезли, сколько дней он лежал на складе и в какой магазин приехал.
Его главная сила в другом. GTIN позволяет понять какой это товар. А индивидуальный серийный номер — какой это конкретный экземпляр. И дальше информационные системы уже могут работать именно с ним.
Поэтому две одинаковые пачки йогурта на одной полке для человека могут быть совершенно взаимозаменяемыми. А для системы между ними есть принципиальная разница: у каждой своя цифровая идентичность.
И, пожалуй, это самая интересная вещь, спрятанная в маленьком чёрно-белом квадрате.