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