Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Генератор Datamatrix — создай штрих код Data Matrix онлайн и бесплатно. Генератор Дата Матрикс позволяет задать нужную форму и размер штрихкода.

Данный генератор дата матрикс позволяет сделать по одному штрих коду за раз.

Если вам требуется сделать много кодов, например, из CSV или XLS файла, то перейдите в раздел Программы Генераторы Датаматрикс.

Остальные параметры, такие как форма модуля datamatrix и плотность размещения модулей datamatrix обычно не меняют.

Код data matrix создаётся в формате картинки GIF без потери качества.

Просто нажмите на полученное изображение штрих кода дата матрикслевой клавишей мышки и выберите «сохранить картинку».

Генератор создаёт штрих код по современному стандарту GS1 Data Matrix

Пример генерации кода DataMatrix

Я закодировал адрес сайта ecoprint.spb.ru с помощью кода DataMatrix различной формы и размера.

Вы можете проверить как считывается код DataMatrix с помощью камеры своего смартфона.

Квадратный DataMatrix код

стандартный размер, прямоугольный data matrix код получается меньше по высоте, чем квадратный датаматкрис код

Четырёх секционный Data Matrix код

плотность размещения модулей = 0.8

Код DataMatrix с крестиками

замена формы модуля на «Х»

Код DataMatrix с точками

круглая форма модуля

Генератор Data Matrix Онлайн

Все современные программы для печати этикеток на термопринтере умеют генерировать код Дата Матрикс и создавать этикетки для маркировки в системе Честный Знак.

Программы генераторы штрих кода дата матрикс используют для подключения к базе данных с кодами маркировки (обычно в форме файла csv). После настройки подключения можно печать этикеток по шаблону.

Я сделал подборку программ для печати этикеток, в которую входят как бесплатные, так и платные программы.

Выбор программы зависит от модели вашего принтера этикеток и от потребностей в уровне автоматизации процесса штрих-кодирования.

Программа для печати этикеток DataMatrix

Авторизация

Время на прочтение

Привет всем! В данной статье предлагаю небольшой обзор возможностей актуальной библиотеки стандартных подсистем (БСП) на предмет формирования большинства существующих штрихкодов.

Для чего это нужно и чем может быть полезная эта статья? Поскольку, у нас в России сейчас активно наращивает обороты маркировка продукции (сигареты, обуви, текстиля и т.п), функционал формирования штрихкодов был включен в основу всех типовых конфигураций — БСП.

Основные возможности БСП инструментов разработчика «Генерация штрихкодов»

Базовой «входящей» серверной функцией-структурой для вывода штрих-кода является функция ПараметрыГенерацииШтрихкода() Экспорт

Выглядит она вот так:

Функция ПараметрыГенерацииШтрихкода() Экспорт

ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить(«Ширина» , 100); // Число
ПараметрыШтрихкода.Вставить(«Высота» , 100); // Число
ПараметрыШтрихкода.Вставить(«ТипКода» , 99); // Число
ПараметрыШтрихкода.Вставить(«ОтображатьТекст» , Истина); //Булево
ПараметрыШтрихкода.Вставить(«РазмерШрифта» , 10); // Число
ПараметрыШтрихкода.Вставить(«УголПоворота» , 0); // Число
ПараметрыШтрихкода.Вставить(«Штрихкод» , «»); // Строка
ПараметрыШтрихкода.Вставить(«ПрозрачныйФон» , Истина); // Булево
ПараметрыШтрихкода.Вставить(«УровеньКоррекцииQR», 1); // Число (0 — L, 1 — M, 2 — Q, 3 — H)
ПараметрыШтрихкода.Вставить(«Масштабировать» , Ложь); // Булево
ПараметрыШтрихкода.Вставить(«СохранятьПропорции» , Ложь); // Булево
ПараметрыШтрихкода.Вставить(«ВертикальноеВыравнивание» , 1); // Число (1 — верх, 2 — центр, 3 — низ)
ПараметрыШтрихкода.Вставить(«GS1DatabarКоличествоСтрок», 2); // Число
ПараметрыШтрихкода.Вставить(«ТипВходныхДанных», 0); // Число (0 — Строка, 1 — Base64)
ПараметрыШтрихкода.Вставить(«УбратьЛишнийФон» , Ложь); // Булево
ПараметрыШтрихкода.Вставить(«ЛоготипКартинка»); // Строка (base64 png)
ПараметрыШтрихкода.Вставить(«ЛоготипРазмерПроцентОтШК»); // Число

Возврат ПараметрыШтрихкода;

КонецФункции

Обратите внимание на параметр структуры «ТипКода». Поддерживаются следующие типы кодов:

// 99 — Авто выбор
// 0 — EAN8
// 1 — EAN13
// 2 — EAN128
// 3 — Code39
// 4 — Code128
// 5 — Code16k
// 6 — PDF417
// 7 — Standart (Industrial) 2 of 5
// 8 — Interleaved 2 of 5
// 9 — Code39 Расширение
// 10 — Code93
// 11 — ITF14
// 12 — RSS14
// 14 — EAN13AddOn2
// 15 — EAN13AddOn5
// 16 — QR
// 17 — GS1DataBarExpandedStacked
// 18 — Datamatrix ASCII
// 19 — Datamatrix BASE256
// 20 — Datamatrix TEXT
// 21 — Datamatrix C40
// 22 — Datamatrix X12
// 23 — Datamatrix EDIFACT
// 24 — Datamatrix GS1ASCII:

Далее, все достаточно просто — мы отправляем структуру параметров в серверную функцию ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода) через экспортную функцию ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт

Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);

ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);

Если ВнешняяКомпонента = Неопределено Тогда
ТекстСообщения = НСтр(«ru = ‘Ошибка подключения внешней компоненты печати штрихкода.'»);
ЗаписьЖурналаРегистрации(НСтр(«ru = ‘Ошибка генерации штрихкода'»,
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ТекстСообщения);
ВызватьИсключение ТекстСообщения;
КонецЕсли;

Возврат ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);

КонецФункции

выглядит это так:

Данная функция возвращает структуру РезультатОперации следующего содержания:

РезультатОперации = Новый Структура();
РезультатОперации.Вставить(«Результат», Ложь); // сработало или нет
РезультатОперации.Вставить(«ДвоичныеДанные»); // двоичные данные изображения штрихкода
РезультатОперации.Вставить(«Картинка»); // картинка

Так же, обратите внимание, что Внешняя компонента — основной объект для формирования «картинки» штрихкода, встроенный в ОбщийМакет.КомпонентаПечатиШтрихкодов конфигурации БСП. Получить его можно вот так:

СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);
ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);

Собственно, на этом базовых знаний достаточно, чтобы перейти от теории к практике — в следующем разделе привожу рабочий пример использования данного функционала.

Рабочий пример использования функционала БСП для формирования штрихкода

Здесь я привожу набор процедур и функций для формирования штрихкода:

Заключение и выводы

В даннойрассмотрели основную выжимку настройки и применения методов генерации штрихкодов с системе БСП. Данные методы вы можете использовать в любой стандартной конфигурации 1с, основой которой является библиотека стандартных подсистем. Спасибо за прочтение. В качестве благодарности, вы можете поддержать автора статьи любым желаемым способом

С 1 июля 2019 года в России введена обязательная маркировка группы товаров. С 1 марта 2020 года под этот закон должна была попасть обувь. Не все успели подготовиться, и в результате запуск перенесли на 1 июля. Lamoda среди тех, кто успел.

Поэтому мы хотим поделиться опытом с теми, кому еще только предстоит маркировать одежду, шины, парфюм и т.д. В статье описан ряд отраслевых стандартов, некоторая нормативная документация и личный опыт. Статья предназначена в первую очередь для интеграторов и разработчиков, которым только предстоит разбираться в этом проекте.

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Обратите внимание, что нормативная база часто меняется, и у автора нет возможности постоянно обновлять материал. Поэтому к моменту прочтения часть информации может уже устареть.

Личный опыт получен автором как в рамках работы по проекту Datamatrix в Lamoda, так и при разработке собственного бесплатного приложения для маркировки BarCodesFx.

С 1 июля 2019 года в России действует закон об обязательной маркировке. Закон распространяется не на все группы товаров, и сроки вступления в силу обязательной маркировки для товарных групп различаются. Сейчас под обязательную маркировку попадают табак, шубы, обувь, лекарства. В ближайшее время будет вводиться для шин, одежды, духов и велосипедов. Каждая группа товаров регулируется отдельным постановлением правительства (ППР). Поэтому некоторые утверждения, правильные для обуви, могут быть неправильными для других групп товаров. Но можно надеяться, что техническая составляющая не будет сильно варьироваться для разных товарных групп.

Основная идея маркировки — каждой единице товара присваивается индивидуальный номер. По этому номеру можно отследить историю конкретной единицы товара с момента производства или импорта в страну, до момента выбытия на кассе. Звучит красиво, но на практике крайне сложно реализуемо.Подробнее концепт описан на официальном сайте честного знака.

Общепринятые термины и понятия

УОТ — участник оборота товаров.
ЦРПТ — центр развития перспективных технологий. Частная компания, единственный гос. подрядчик по проекту маркировки. Работает по схеме государственного частного партнерства (ГЧП). Информации о других участниках тендера по проекту, как и собственно о самом тендере, к сожалению, нет.
ТГ — товарная группа. Обувь, одежда, шины и т.д.
GTIN — по сути, артикул с учетом цвето-размера. Выдается в GS1 или нацкаталоге для каждого импортера или производителя на его товар. Предварительно производитель или импортер должен описать этот товар.
ППР — постановление правительства РФ. Для обуви — 860.
КМ — код маркировки. Уникальный набор символов, присвоенный конкретной единице товара. Для обуви состоит из GTIN, серийного номера, кода проверки и криптохвоста.
GS1 — международная организация, выдающая GTIN-ы. Так же составители ряда стандартов по маркировке.
Нацкаталог — аналог GS1, разработанный ЦРПТ.
Криптохвост — аналог цифровой подписи, подтверждающий легальность КМ. Обязательно должен быть в датаматриксе на марке. Хранение в текстовом виде запрещено. После распечатывания марки должен быть удален согласно договору с ЦРПТ. Не известно ни одного случая реального использования.
СУЗ — станция управления заказами. Система, в которой заказываются КМ-ы для товара.
ЭДО — электронный документооборот.
УКЭП — усиленная квалифицированная электронная подпись.

Термины и понятия в рамка данной статьи

ЧЗ — честный знак.
ЛК — личный кабинет.
Марка — напечатанный код маркировки.

Процесс выглядит следующим образом: вначале участник (УОТ) выпускает электронную подпись (УКЭП), регистрируется в честном знаке (ЧЗ), описывает товар в нацкаталоге или GS1, получает GTIN-ы на товар. На сайте честного знака эти шаги подробно расписаны, поэтому на них останавливаться не будем.

Заказ и получение кодов

После получения GTIN-ов участник (УОТ) делает заказ кодов (КМ) в системе СУЗ.
Важно, но не очевидно.

Из личного опыта работы с заказами кодов маркировки КМ через API системы СУЗ.

Структура кодов

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

Про API уже было написано выше. Что касается двух других способов. Изначально СУЗ позволял забрать коды только один раз. И если забирался pdf файл, то получить коды в текстовом виде можно было только пересканировав все датаматриксы из pdf. К счастью, добавили возможность несколько раз забирать коды, и эта проблема решилась. В течение двух дней коды еще доступны для повторного скачивания.

Если забираете в csv формате, то никогда, ни при каких обстоятельствах, не открывайте его в экселе. И никому не разрешайте. В экселе есть функция автосохранения. В момент сохранения эксель может самым непредсказуемым образом видоизменить ваши коды. Рекомендую использовать notepad++ для просмотра кодов.

Если открыть файл из СУЗ в notepad++, можно увидеть строки такого вида. Третий код — невалидный (у него отсутствуют разделители GS).

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Партнеры передавали нам коды для маркировки своего товара. Невооруженным взглядом видно, какие файлы формировались с помощью экселя — до 5% кодов были невалидны.

Настоятельно рекомендую почитать про стандарты GS1. В описании стандарта есть ответы на многие вопросы по формированию DataMatrix.

Код идентификации состоит из GTIN и серийного номера. Согласно стандарту GS1 им соответствуют идентификаторы применения (ИП) 01 и 21. Обратите внимание, идентификаторы применения не являются частью GTIN и серийного номера. Они указывают, что после идентификатора применения (ИП) идет GTIN или серийный номер. Это особенно важно при программировании кассового ПО. Для заполнения тега 1162 нужны именно GTIN и серийный номер, без идентификаторов применения.

Для УПД (универсального передаточного документа) и прочих документов, наоборот, чаще всего нужна запись целиком с идентификаторами применения.

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

В стандарте GS1 прописано, что GTIN имеет фиксированную длину в 14 знаков и может состоять только из цифр. Серийный номер имеет переменную длину и описан на 155 странице стандарта. Там же есть ссылка на таблицу с символами, которые могут встречаться в серийном номере.

Так как серийный номер имеет переменную длину, то разделитель GS указывает на его окончание. В таблице ASCII у него код 29. Без этого разделителя ни одна программа не поймет, в какой момент закончился серийный номер, и начались другие группы данных.

Более подробно про код маркировки (КМ) можно прочитать в официальной документации.

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

Генерация DataMatrix

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Следующий шаг — это преобразование данных в DataMatrix код. В постановлении правительства РФ 860 указан ГОСТ, согласно которому необходимо формировать DataMatrix. Так же в ППР 860 указано обязательное использование идентификаторов применения. Обратите внимание, что в стандарте DataMatrix нет понятия «идентификаторы применения». Они есть только в стандарте GS-1 DataMatrix. Выходит, что ППР 860 неявным образом обязывает использовать именно GS-1 DataMatrix. К счастью, стандарты похожи. Основное различие: в GS-1 DataMatrix первый символ должен быть FNC1. Символ GS не должен стоять на первом месте в DataMatrix, только FNC1.

FNC1 нельзя просто взять и добавить в строку как GS. Его должна добавлять программа, генерирующая DataMatrix. На ресурсах Альянс Форты выложено несколько мобильных приложений, с помощью которых можно проверить правильность сгенерированных DataMatrix кодов.

Важно. Приложение честный знак принимает невалидные DataMatrix. Даже QR-коды. Тот факт, что марка распозналась и информация о товаре отобразилась, не является показателем, что DataMatrix сформирован правильно. Даже при замене криптохвоста приложение ЧЗ распознало марку и отобразило данные по товару.

Позже ЧЗ выпустили пояснение, как правильно генерировать коды. Из-за большого числа кодов с ошибками они признали коды без FNC1 валидными, но, все-таки, рекомендуют генерировать GS-1 DataMatrix.

К сожалению, достаточно большой процент датаматриксов от партнеров приходил с ошибками. Благодаря пояснениям от ЧЗ был полностью решен вопрос “Можно ли торговать таким товаром после 1 июля или нет?”. Спойлер — можно.

Печать

Обратите внимание на способ печати марок. При печати на термопринтере марка быстро выцветает, и этот товар уже нельзя продавать. Нечитаемая марка — это нарушение ППР 860. Что ведет к изъятию товара, штрафам, уголовной ответственности.

Используйте термотрансферную печать. В этом случае марка не так сильно подвержена выцветанию. От материала этикетки также зависит, насколько марка подвержена механическим повреждениям. Если код не считывается из-за механического повреждения, это равносильно отсутствию марки со всеми вытекающими последствиями.

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Выбирайте принтер из планируемых объемов печати. Настольные принтеры не рассчитаны на печать 100 000 этикеток в день.

Остановка и старт печати повышают износ принтера. Некоторые программы отправляют задание на печать по одной этикетке. Такими программами лучше не пользоваться.

Работа с документами

После того как марки распечатаны и наклеены, все дальнейшие операции с ними происходят через документы или личный кабинет честного знака.

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

Обратите внимание на следующие моменты.

При разработке моего бесплатного приложения для маркировки BarCodesFX, изначально была сделана интеграция с API СУЗ. Когда честный знак второй раз неожиданно изменил логику работы API, от интеграции пришлось отказаться. Надеюсь, в дальнейшем ЧЗ удастся стабилизировать разработку и API, т.к. для некоммерческого продукта мне очень затратно каждый день перепроверять, не было ли изменений в API, и оперативно дорабатывать.

При внедрении маркировки внимательно ознакомьтесь с нормативной документацией по вашей товарной группе ТГ, правильно печатайте GS1-DataMatrix и будьте готовы к любым непредвиденным изменениям со стороны честного знака ЧЗ.

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

Малоизвестные факты о штрихкодах — загадочные цифры под штрихкодом

Число зверя, штрихи смерти — насколько все это реально? Можно ли зашить в штрихкод видеоролик или фото голой Эммы Уотсон? Бывают ли “неправильные штрихкоды”, и что вообще значит “неправильный штрихкод”?

В “Клеверенсе” мы разрабатываем платформу Mobile SMARTS для создания мобильных решений по учету маркированного товара и постоянно сталкиваемся с детскими ошибками в маркировке. Обычно они вызваны простым нежеланием людей хоть немного разбираться в теме.

Наша платформа тоже не идеальна, но кое-что в своём деле мы понимаем. Статья не к тому, что типа мы крутые и разбираемся, а все вокруг не крутые и не разбираются, нет. У каждого свои задачи, мы тоже часто лажаем. Просто тема набирает популярность и выходит в массы, а любые ошибки стоят денег.

Сначала для затравки расскажем про кассовый штрихкод, а затем про загадочный GS1 DataMatrix, который используется в проекте тотальной маркировки товаров.

Сама статья больше развлекательная, всё изложенное при желании легко гуглится, но может и побудить кого-то изучить тему глубже.

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Цифры под штрихкодом — что это такое? Знающие люди говорят, что тут всё просто: именно эти цифры “зашиты” в штрихкод. Девушка на кассе вбивает в программу цифры под штрихкодом — и вуаля — товар найден.

К сожалению, это заблуждение. Цифры под штрихкодом не “зашиты” в штрихкод. Для разговоров у камина сойдет, а для айтишника беда.

Надписи под штрихкодом называются Human readable interpretation (HRI). Одно только название уже должно наводить на мысль, что тут не всё в порядке.

В самом мягком варианте вера в то, что цифры под штрихкодом повторяют содержимое штрихкода — это примерно как верить в то, что название файла определяет его содержимое. Типа: “Переименовала ваш файл в .doc, но он всё равно не открывается”.

Рассмотрим подробнее, где тут собака зарыта.

Кассовый штрихкод

Пример про кассовый штрихкод — для затравки. Он на самом деле не вызывает никаких проблем, потому что за 50 лет использования в софте и оборудовании были вставлены 1000 костылей, чтобы обойти все проблемы (ну почти). Зато он хорошо иллюстрирует вопрос.

Вот в этих двух штрихкодах (EAN-13) ниже, под которыми написано “4601200000003” и “0123456789128”, в обоих нет штрихов для первой цифры. В первом штрихкоде нет штрихов для “4” (она закодирована другим способом), а во втором штрихкоде вообще в принципе нет лидирующего нуля, хотя он и напечатан под штрихкодом.

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

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

Рассмотрим поближе, что тут происходит.

В первом приведенном штрихкоде (“4601200000003”) в начале идут две длинные полосочки, они кодируют “начало штрихкода”, далее идут штрихи и пропуски для цифры “6”, затем про цифры “0”, “1”, “2”, “0” и “0”, две длинные полосочки в центре говорят про середину, затем пять одинаковых групп штрихов и пропусков кодируют “00000”, далее идут штрихи и пропуски для цифры “3” и завершающие две длинные полоски про конец штрихкода. Итого, в штрихкоде есть штрихи только про “601200000003”. Цифра “3” (последняя) в полосках штрихкода есть, а первой “4” нет! Откуда же взялась “4”?

Дело в том, что “4” закодирована грязным хаком. Для неё не хватает места, и вообще всё это большой исторический казус.

Изначально такие кассовые штрихкоды появились в США, там они состоят из 12 цифр и называются UPC (Universal Product Code). Для переноса технологии в Европу и адаптации стандарта Европе нужны были дополнительные цифры, потому что американские 12 все уже были заняты.

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Первым товаром, приобретенным по штрих-коду на этикетке, стал блок из 10 жевательных резинок Wrigley Juicy Fruit. Это произошло в супермаркете Marsh города Трой (Огайо) в четверг, 26 июня 1974 года в 8.01 утра. В историю вошли и имя покупателя, и имя кассира, открывших новую страницу розничной торговли. Теперь упаковка жвачки, которая тогда обошлась в 67 центов, вместе с чеком хранятся в музее американской истории Смитсоновского института.

Чтобы расширить емкость, можно было бы просто добавить еще немного штрихов и пропусков, но в те времена это серьезно ухудшало считываемость. Поэтому вместо того, чтобы просто увеличить штрихкод в ширину, был применен “хак”.

По американскому стандарту любая из цифр штрихкода может быть записана: а) обычными штрихами и пропусками; б) их зеркальным отражением; в) инверсией черного и белого; г) зеркальной инверсией. Всё это нужно для того, чтобы можно было печатать инверсные штрихкоды (белым по черному) и сканировать штрихкод вверх ногами (зеркальное отражение в случае штрихкода — то же самое, что и поворот на 180°).

В “американском” штрихкоде (который на 12 цифр) первые 6 цифр кодируются обычными штрихами, а вторые 6 цифр инвертированными штрихами (где черные штрихи заменены на белые полоски и наоборот). Это сделано для того, чтобы понимать, перевернут штрихкод или нет, нормально я его сканирую или вверх ногами (и затем декодировать цифры в правильном порядке, а не задом наперед).

В новом “европейском” штрихкоде (который на 13 цифр), первая цифра (например, “4”) кодируется не штрихами, а путем «перетасовывания» способов кодирования следующих за ней 6 цифр из первого блока (второй блок из 6 оставили в покое).

Например, следующая за четверкой “6” выводится как обычно, штрихи следующего за ней “0” выводятся в обратном порядке (зеркально), следующие за ней “1” и “2” выводится снова в обычном виде, следующие два “0” снова зеркально. Общая длина штрихкода и число штрихов в результате этого трюка не меняется.

Для “американского сканера” такая белиберда не имеет смысла, а для Европы это тайный знак того, что в штрихкоде закодирована еще одна цифра! (да, мы всегда знали, что европейцы извращенцы).

Для всех цифр от “1” до “9” были придуманы такие правила тасовки способов кодирования. Для “0” ничего нет, т.е. 13-значный штрихкод с лидирующим нулем визуально ничем не отличается от 12-значного штрихкода без этого лишнего ноля (EAN-13 с лидирующим нулем эквивалентен UPC-А).

Из этого получается первый прикол, что если перед нами “американский” штрихкод (в котором варианты кодирования не “перетасованы”), то “американский сканер” читает 12 цифр, а условный “европейский сканер” может считать, что в нем есть лидирующий «0», и считывать лишний ноль (т.к. для кодирования ноля не предусмотрено никакой “перетасовки”, этого “лидирующего нуля” очевидно в принципе нигде нет в штрихкоде).

Конечно, мир давно глобализован, поэтому “американский” сканер и “европейский” сканер — это просто условности. Сканер один и тот же, но у него есть настройка: нужно ли ему в принципе считывать EAN-13 (Европа) или читать только UPC-А (США), а если считывать EAN-13, то надо ли добавлять лишний ноль к американским штрихкодам UPC-А.

С этим связана одна распространенная проблема при внедрении штрихкодирования: когда в базе данных у компании либо нет нолей в начале штрихкодов, а сканер считывает с “лишним” нолем, либо наоборот, в базе данных есть ноль в начале, а сканер его “не считывает” (хотя, что там считывать, — этого ноля в принципе в штрихкоде нет).

Казалось бы, сложно накосячить в использовании EAN-13/UPC. Тем не менее, люди делают следующие ошибки:

В наших программных продуктах, таких как “Магазин 15” или “Склад 15”, построенных на платформе Mobile SMARTS, мы решаем эту проблему очень просто: сканер устройства всегда автоматически настраивается на возврат ноля, а поиск товара по базе данных производится два раза: и с нолем, и без ноля (чтобы уж точно найти товар).

Сканер мы стараемся настраивать программно, без участия человека. Если сканер нельзя настроить программно — то это всегда проблема, потому что по умолчанию сканером может обрезаться не только 0 (который в начале), но еще и чексумма (которая в конце), тогда в программу придут не 13, а уже 11 символов, зачастую даже без указания типа штрихкода (такие замечательные сканеры тоже бывают).

В этом случае мы бессильны улучшить результат. 11 символов могли прийти от сканирования любого другого типа штрихкода, мы не можем считать все штрихкоды как EAN-13. Чтобы настроить сканер, человеку придется сканировать с листа настроечные штрихкоды или заходить в какие-нибудь меню, а всё это — источники ошибок.

GS1 DataMatrix

Этот пример стал популярным благодаря введению обязательной маркировки товаров. История полна граблей, велосипедов и трупиков мелких животных, как сарай вашей бабушки.

Ну ладно, допустим с EAN-13 можно придраться и сказать, что первая цифра всё-таки есть в штрихкоде, просто она закодирована не совсем штрихами (хотя для лидирующего “0” это и не так).

Возьмем тогда другой пример, штрихкод GS1 DataMatrix «(21)abba01(01)04601200000003»:

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

В этом штрихкоде “внутри” нет ни скобок, ни символа «0», ни буквы «a», ни переноса строки.

Что тут происходит?

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

Во-вторых, в штрихкоде есть специальные управляющие символы, которые должна расставить та программа, которая формирует данные для штрихкода. Не какая-то бесплатная opensource программа, написанная умными очкариками, а ваша программа, та самая, которую пишете Вы, мой друг. В этот раз символы, которые нужно вставить, не имеют отношения к “коррекции” и т.п., а размечают данные, которые нужно закодировать в штрихкод.

В самом начале в штрихкод вставляется управляющий символ, который называется FNC1 и имеет код 232, что соответствует либо странному печатаемому символу «Þ» (ANSI), либо русской букве “и” (Windows-1251), смотря какую кодировку использовать. Этот символ говорит, что у нас не просто абы какой DataMatrix, а именно GS1 DataMatrix, данные в котором имеют определенный формат: массив данных из пар (“код поля”, “значение поля”).

Этот управляющий символ FNC1 попадает в самое начало штрихкода, но его нельзя “передать” в штрихкод в составе данных.

Кроме того, непечатаемые символы, вполне очевидно, нельзя копипастить в составе строки, хаха! Страдай, кожаный мешок!

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

Далее, поскольку в штрихкоде внутри нет скобок, то уже непонятно, где кончается одно поле и начинается другое, где тут номера полей. Без скобок получается “21abba010104601200000003” (тут “01” встречается три раза, ха-ха).

Где заканчивается “01” из значения поля (21) и начинается настоящее (01)?

Это решается следующим способом:

По стандарту GS1 поля имеют формат. Не абы что, а формат значения. Например, значение для (01) должно состоять из 14 цифр и баста (нельзя 13 цифр, нельзя 12 цифр, нельзя не цифры). А поле (21), наоборот, имеет переменную длину, разрешены цифры, латинские буквы обоих регистров, знаки препинания и даже (опачки!) скобки.

Если после значения для (21) штрихкод не закончился, и там еще что-то есть, то в данные вставляется разделитель (это может быть снова или FNC1, или непечатаемый символ GS с кодом 29).

А общее правило звучит так: спецсимвол GS не вставляется, только в случае если AI начинается с пары цифр из этой вот таблицы:

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Для всех остальных полей GS1 (не из этой таблицы) в конце значения нужно вставлять GS.

Т.е., мы получим “FNC121abba01GS0104601200000003” (только помним, что первый FNC1 мы не будем передавать в программу формирования штрихкода, а второй GS — это не строка “GS”, а один символ с кодом 29).

Эти требования — именно про данные, а не про штрихкод DataMatrix, потому что в штрихкод DataMatrix можно положить любые данные, они прекрасно закодируются и прочитаются. Тут речь о GS1 DataMatrix, который имеет определенный формат, и ваша программа должна соблюсти этот формат, прежде чем подавать данные в штрихкод.

Вообще говоря, в мире существуют программы печати штрихкодов, которым можно скармливать данные со скобками и они сами всё разрулят. Но это специализированный софт, который стоит денег, а не тот бестолковый и бесплатный онлайн-генератор штрихкодов, которым вы пользуетесь.

И наконец. То, как это будет напечатано и то, как это будет отсканировано, — две большие разницы. То, как данные печатаются под штрихкодом, и как они передаются сканером — это в чистом виде настройки принтера и сканера.

В нашем примере мы закодировали в штрихкод поля порядке: сначала (21), потом (01), а на изображении под штрихкодом распечаталось сначала (01), потом (21). Это снова называется Human readable interpretation (HRI), и порядок вывода в подписи соответствует правилу “потому что так принято”.

Сканер штрихкодов тоже имеет свои настройки, которые заставляют его переставлять поля, вставлять скобки и другие символы, переносить строки и т.п.

В большинстве случаев сканер прочитает наш штрихкод как “21abba01GS0104601200000003”. Никакого лидирующего FNC1, никаких скобок, GS не печатаемый и не виден в “Блокноте” (нужно использовать хотя бы Notepad+).

И принтер, и сканер могут делать со штрихкодами что хотят: добавлять и убирать символы, менять их местами — ради соответствия гайдлайну или для совместимости со сторонней программой.

Что еще интересно: в этом штрихкоде только 16 байт данных (на 24 символа без скобок).

Вот что тут происходит:

Т.е. чтобы закодировать “a”, нужно записать в штрихкод “b”, чтобы закодировать “1”, нужно записать “2” и т.д., именно поэтому прямо в самом штрихкоде нет байта 97 (значение буквы “a” в ASCII).

Итого, в приведенном штрихкоде “закодировано” в байтах 232, 151, 98, 99, 99, 98, 131, 232, 131, 134, 190, 142, 130, 130, 130, 133. И это еще до кодов коррекции и паддинга!

Непонимание процесса кодирования приводит к тому, что, например, для начавшейся обязательной маркировки обуви люди печатают на принтер неправильно сформированные данные и получают неправильные штрихкоды, которые выглядят вполне нормально, читаются приложением “Честный знак”, но данные в них неверные, как минимум это не GS1 DataMatrix.

Штрихкоды неправильно напечатаны, неправильно читаются, и такая обувь не считается правильно промаркированной.

В своем софте “Кировка” мы боремся с этим следующим образом: для печати принимаем в качестве исходных данных любой мусор, пытаемся распарсить его как GS1 DataMatrix, разбираем на косточки. Если всё прошло удачно, то конвертируем в правильный формат, чтобы принтер это понял; а при сканировании перепроверяем данные от сканера, делая таким образом вывод о правильности печати.

Для этого нам, конечно, приходится работать на нативном уровне и со сканером мобильных устройств, и с принтерами, чтобы всё это было правильно ими интерпретировано, а мы собирали максимально полную информацию.

Выполним еще одно упражнение: посмотрим, какого размера должен быть штрихкод GS1 DataMatrix для хранения кода маркировки обуви и легпрома.

На сайте «Честного знака» написано, что код маркировки обуви должен содержать следующие поля (для легпрома те же требования):

Для каждого из этих полей в данных для штрихкода должен быть указан идентификатор применения GS1 (AI, application identifier).

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Таблица codeword для DataMatrix

Таблица, объясняющая кодирование КМ обуви в DataMatrix:

Как видно, размер данных в теории может меняться в широких пределах от 68 до 118 байт. На практике разброс меньше, длина ближе к 118, потому что в серийном номере и в криптокоде мало цифр и много знаков препинания, включая скобки.

Согласно GS1 DataMatrix Guideline, такие данные укладываются в штрихкоды размером от 36х36 до 44х44 (колонок и строк битов, не миллиметров). В миллиметрах размер будет зависеть от разрешающей способности принтера (обычно это 203-600 dpi).

Формирование матрицы данных gs1 и малоизвестные факты о штрих-кодах

Таблица из GS1 DataMatrix Guideline

А как же голая Эмма Уотсон? Рассмотрим в следующей статье.

Про мини ПК:  6 лучших весов 2023 года
Оцените статью
Карман PC
Добавить комментарий