FNC1
FNC1 — служебный символ в GS1-кодах (GS1-128, GS1 DataMatrix, GS1 QR): в первой позиции включает режим GS1, внутри данных разделяет поля переменной длины, заменяя разделитель GS (ASCII 29).
FNC1 (Function 1) — служебный символ в штрихкодах и 2D-кодах, у которого нет собственного печатного значения. Он не кодирует данные, а управляет тем, как декодер читает остальную строку. Встречается в форматах семейства GS1: GS1-128, GS1 DataMatrix и GS1 QR Code.
Зачем нужен FNC1
Без FNC1 сканер видит просто последовательность цифр и символов и не знает, что перед ним структура GS1. Именно FNC1 в самом начале сообщает: дальше идут идентификаторы применения (AI) по стандарту GS1 — GTIN, номер партии, срок годности, серийный номер. По этому флагу учётная система разбирает строку на поля и понимает смысл каждого. Уберите FNC1 — и тот же код прочитается как бессмысленный набор символов.
Признак GS1 и разделитель полей
У FNC1 две разные роли в зависимости от позиции.
В первой позиции — это флаг режима GS1. Сканер по нему включает разбор по AI и обычно добавляет к данным идентификатор символики: ]C1 для GS1-128, ]d2 для GS1 DataMatrix, ]Q3 для GS1 QR.
Внутри данных — это разделитель полей переменной длины. Поля фиксированной длины декодер отмеряет сам: GTIN по AI (01) — 14 цифр, срок годности по AI (17) — 6 цифр. А после поля переменной длины, например номера партии (10) или серийного номера (21), нужен явный конец — его и ставит FNC1. При передаче сканер отдаёт этот разделитель как символ GS (Group Separator, ASCII 29).
Где встречается
FNC1 работает во всех GS1-символиках: линейном GS1-128 на логистических этикетках, а также в GS1 DataMatrix и GS1 QR. В российской маркировке «Честный знак» коды Data Matrix собирают именно так: GTIN (01) плюс серийный номер (21), затем разделитель GS, затем криптохвост (91) и (92). Без корректных разделителей FNC1/GS такой код не пройдёт проверку. Собрать линейный код с полями GS1 можно в генераторе штрихкодов.
Частые вопросы
Чем FNC1 отличается от обычных данных в коде?
FNC1 — служебный символ без печатного значения, он не хранит информацию, а управляет чтением. В первой позиции включает режим GS1, внутри строки отделяет поля переменной длины. В человекочитаемой подписи под кодом сам FNC1 не показывается — там видны только AI в скобках и их значения.
Что будет, если FNC1 в коде нет?
Сканер прочитает символы, но не поймёт, что перед ним GS1-структура. Данные придут одной сплошной строкой без деления на GTIN, партию и срок годности, а учётная система не сможет разложить их по полям AI. Для маркировки и логистики такой код бесполезен — его отклонят на приёмке.
FNC1 и разделитель GS (ASCII 29) — это одно и то же?
Это связанные, но не тождественные вещи. FNC1 — логический управляющий символ символики. Когда он стоит как разделитель полей переменной длины, сканер при передаче данных выдаёт его в виде байта GS (Group Separator, ASCII 29, 0x1D). То есть FNC1 живёт в коде, а GS — на выходе сканера.
Нужен ли FNC1 после каждого поля?
Нет. Разделитель ставят только после полей переменной длины и только если за ними идёт ещё одно поле. Поля фиксированной длины — GTIN (01) в 14 цифр или срок годности (17) в 6 цифр — декодер отмеряет по длине, отдельный FNC1 им не требуется. Последнее поле в строке закрывать тоже не обязательно.
В каких кодах используется FNC1?
Во всех символиках GS1: линейном GS1-128, GS1 DataMatrix и GS1 QR Code. В обычном Code 128 или простом QR без идентификаторов применения FNC1 не нужен. Именно по наличию FNC1 в первой позиции сканер и отличает GS1-код от рядового штрихкода той же символики.