# Общие вопросы

# Как правильно сформировать GS1 DataMatrix?

**Давайте разберемся - как "собирается" штрих код.**

Предположим, у вас есть некая уникальная последовательность символов (применительная к молоку): **0112345678901231215w9EJp93abc1.** Она формируется оператором и называется **кодом маркировки**.

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

**Почему из этой последовательности не получается средство идентификации?**

**Во-первых**, нужно помнить, что 2D код для системы маркировки должен быть не просто DataMatrix, а GS1 DataMatrix.

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

Разделение этих блоков данных друг от друга производится сканером при помощи:

\- **идентификаторов применения**, которые располагаются в начале каждого блока;

\- **разделителей**, которые указывают на то, что блок данных закончился (и, соответственно, следом начинается другой).

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

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

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

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

Наблюдательный читатель уже заметил скобки-галочки, окружающие символы &lt;FNC1&gt; и &lt;GS&gt;, в данном случае они нужны для того, чтобы визуально показать, что 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](https://barcode.tec-it.com/).

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

[![image.png](https://wiki.jinnvl.ru/uploads/images/gallery/2026-04/scaled-1680-/54Dimage.png)](https://wiki.jinnvl.ru/uploads/images/gallery/2026-04/54Dimage.png)