Статья от Партнера
Статья от Партнера

Как "собирается" код DataMatrix

Иногда пользователи системы "Честный ЗНАК"  при попытке создать и напечатать штрих код GS1 DataMatrix где-то вне системы* получают неработающий код. Обращаем внимание сообщества на то, что для генерации штрих кодов и печати средств идентификации лучше использовать сценарии, предусмотренные Честным ЗНАКОМ. Статья написана с целью объяснения некоторых правил образования двухмерных кодов.

Итак, почему же код может "не работать"? Наиболее распространенная ошибка - когда в стороннем генераторе к печатным символам (тем, которые можно ввести с клавиатуры) добавляют непечатные, управляющие (например, известный всем разделитель GS). То есть последовательно вводят с клавиатуры «G», «S», а потом удивляются – почему код получается не валидным.

Понимание правил о том, как "собирается" штрих код DataMatrix поможет избежать этой и других ошибок. 

Предположим, есть некая последовательность символов, код маркировки, которую формирует оператор системы: 0112345678901231215w9EJp93abc1. Данная последовательность применима к молоку, но в других товарных группах действуют те же правила. 

Если эту последовательность забить в генератор, в том виде, как она есть, в надежде получить графический значок из черных и белых квадратиков (2D код DataMatrix), чтобы затем напечатать его и наклеить на упаковку с продуктом, то таким планам не суждено сбыться. То есть значок-код вы получите, и он будет считываться сканером, но не будет являться средством идентификации системы "Честный ЗНАК", а значит и ТСД, и официальное приложение будут ругаться на такой код. 

Разберем - почему. Каких важных элементов здесь не хватает. 

Во-первых, применительно для системы маркировки используют двухмерный код GS1 DataMatrix, а не просто  DataMatrix. Различия между этими двумя сущностями - тема отдельной статьи. Здесь мы лишь отметим, что  GS1 DataMatrix получается из «обычного DataMatrix» путем добавления префикса <FNC1> в самом начале строки данных кода

Во-вторых, в данную последовательность символов включены несколько групп (блоков) данных. Это: GTIN, серийный номер, ключ проверки (применительно для последовательности, указанной выше).

Сканер разделяет эти блоки данных друг от друга при помощи специальных указателей:

  • т.н. идентификаторов применения, которые располагаются в начале каждого блока;
  • разделителей, которые указывают на то, что блок данных закончился (и, соответственно, следом начинается другой).

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

Таким образом, в нашем «молочном» примере кода маркировки нужен только один разделитель, который отделяет группу с идентификатором применения 21 – серийный номер, от группы с идентификатором 93 – ключ проверки. А вот в кодах маркировке для фармы или шин или обуви – таких разделителей будет уже два.

Возвращаясь к примеру кода, с учетом добавлений признака GS1 DataMatrix и разделителя, наша последовательность уже будет выглядеть так: <FNC1>0112345678901231215w9EJp<GS>93abc1.

Отлично. А как теперь это напечатать?

Наблюдательный читатель уже заметил скобки-галочки, окружающие символы <FNC1> и <GS>. Это и есть непечатные символы, о которых мы говорили выше, а скобки-галочки в данном случае визуально показывают, что FNC1 и разделитель GS отличаются от всего остального ряда символов нашей строки данных.

Обратите внимание: 

FNC1 ≠  последовательность букв и цифр F,N,C,1. GS ≠  паре букв G и S, которые мы могли бы набрать на клавиатуре! Это - управляющие символы, и потому они не являются частью «полезной нагрузки» нашего кода маркировки. И поэтому при печати, добавлять их в строку данных нужно не как печатные символы, а как байты.

В ASCII таблице в байтах  символ FNC1 в десятичном виде представлен как 232, в hex - E8.

Разделитель GS – соответственно 29 и 1D.

Но эта информация скорее ознакомительного плана, нежели практического т.к.  мы опять же не можем просто набрать эти представления с клавиатуры. Добавить FNC1 и GS в строку данных кода маркировки может только генератор.

Рассмотрим получение кода маркировки на примере известного многим генератора** 
https://barcode.tec-it.com.

При выборе типа кода «просто DataMatrix», префикс FNC1 в самом начале кода добавляется вводом в начале строки данных символов \F. Разделитель же добавляем вводом с клавиатуры в нужном месте его HEX представлением в следующем виде: \x1D. При этом, необходимо убедиться в наличии отметки «Определить управляющие последовательности».

data matrix.jpeg

Если же выбрать для генерации код GS1 DataMatrix, то тут префикс FNC1 уже подразумевается, генератор его добавляет автоматически, поэтому \F в начале добавлять уже не нужно, ну а разделитель будет тем же, и на том же месте.

data matrix2.jpeg

Подчеркиваем: операции с кодами маркировки осуществляются только владельцами и в соответствии со сценариями, одобренными «Честным ЗНАКОМ». Их запрещено накапливать в базах данных и передавать третьим лицам. Статья написана с целью объяснения некоторых правил образования кода DataMatrix пользователям системы.  

**Описанное выше применимо только для этого генератора. В других – может быть иначе.

или  в систему, чтобы получать уведомления с ответами на ваши вопросы

Жирный текст
Прикрепить файл
К новым комментариям
Спасибо, информативно.
Не хватает на сайте функционала "Добавить в закладки", поэтому пока зафиксирую комментарием.
25.10.2022 16:40
Подскажите, пожалуйста, как можно получить содержание всех 4х блоков (01,21,91,92) кода GS1 Datamatrix из системы в текстовом формате?
17.04.2024 00:57
Ж Д
Приведенные примеры не действительны ASCII 232 != FNC1 
17.06.2024 22:37
А
Странная ситуация с этим генератором. Берем DataMatrix полученный от Честного знака. Сканируем его сканером в строку.  Закидываем эту строку в генератор описанный выше, добавляем символы разделители как описано. Получаем новую картинку кода GS1 DataMatrix. Дальше самое удивительное: полученная новая картинка кода приложением Честный знак нормально распознается, товар находится, НО... исходная картинка кода и новая не являются идентичными вообще ни разу: они визуально абсолютно разные, причем во всех квадрантах. Но обе сканируются и распознаются в один и тот же товар. Как такое возможно? Разве мы не должны были получить точную «ксерокопию» исходной картинки кода в результате этих операций?
26.08.2024 14:06
С
Этот онлайн генератор GS1 Data Matrix дал идентичную картинку https://barcodes.pro/generator/gs1dmtx
06.09.2024 12:14
А
Как выводить символы GS на устройствах под управлением mac os 10.15.7 / Catalina
31.10.2024 11:59
Задайте вопрос команде Сообщества

Если у вас есть вопросы, связанные с работой Честного Сообщества или предложения по развитию нашей платформы, то напишите нам!

Если у вас вопросы, связанные с маркировкой, то задайте вопрос тут.

Ваше сообщение отправлено

Ожидайте ответ на электронную почту, указанную в обращении

Наверх
Войти в Cообщество
Впервые в сообществе? Зарегистрироваться
Войти через:
Регистрация в Сообществе
Регистрация участника оборота
Уже зарегистрированы?
или
Войти через GoogleВойти через Vk

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Регистрация Партнера/Интегратора
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация в Сообществе

Редактировать изображение партнера/интегратора
Восстановление пароля
Проверьте почту

На почту отправлено письмо со ссылкой восстановления пароля

Восстановление пароля