Как правильно сформировать GS1 DataMatrix?
Давайте разберемся - как "собирается" штрих код.
Предположим, у вас есть некая уникальная последовательность символов (применительная к молоку): 0112345678901231215w9EJp93abc1. Она формируется оператором и называется кодом маркировки.
Если эту последовательность забить в генератор, в том виде, как она есть, в надежде получить графический значок (2D код DataMatrix), чтобы затем напечатать его и наклеить на упаковку с продуктом, то таким планам не суждено сбыться. То есть код DataMatrix вы получите, и он даже будет считываться сканером, но не будет являться средством идентификации для системы «Честный ЗНАК» (официальное приложение, ТСД будут «ругаться» на такой код).
Почему из этой последовательности не получается средство идентификации?
Во-первых, нужно помнить, что 2D код для системы маркировки должен быть не просто DataMatrix, а GS1 DataMatrix.
Во-вторых, данная последовательность символов представляет собой некоторую последовательность групп (блоков) данных. В вышеуказанном примере кода маркировки молока это: 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. При этом, необходимо убедиться в наличии отметки «Определить управляющие последовательности».