Общие требования
Платформа 1С от версии 8.3.10.2168 и выше.
Принцип работы
Этап 1. Вычисляется результирующая матрица (в виде буфера двоичных данных).
Этап 2. Обходя в двойном цикле матрицу (по строкам, по колонкам) создаётся SVG-изображение. Стиль полученного штрих-кода вы можете задавать сами (цвета, картинки и т.д.). Примечание: мобильная платформа 1С поддерживает SVG-изображения начиная с версии 8.3.17.
Технические подробности
Для ускорения работы некоторые данные предварительно рассчитаны и сохранены в hex-, base64- или в json-строки.
Alfa – элементы поля Галуа GF(28): α0, α1, α2, … , α255
Log – порядковые номера элементов поля Галуа
PP – Порождающие многочлены. Хранятся в виде массива коэффициентов при x, начиная со старшей степени и оканчивая свободным членом. При этом хранятся не номера элементов, а значения. Например, порождающий многочлен x7 + α87x6 + α229x5 + α146x4 + α149x3 + α238x2 + α105x + α21 хранятся как массив: 1, 127, 122, 154, 164, 11, 68, 117, что соответствует Alfa[0], Alfa[87], Alfa[229], Alfa[146], Alfa[149], Alfa[238], Alfa[105], Alfa[21].
InfoTable – таблица параметров версий символов. Для каждой версии (от 1 до 40) хранится:
- Size – размер символа;
- Max – максимальный объем данных в битах (для каждого уровня коррекции ошибок);
- Blocks – количество блоков данных (для каждого уровня коррекции ошибок);
- Corr – количество кодовых слов коррекции ошибок для одного блока (для каждого уровня коррекции ошибок);
- Len – количество бит при указании длины данных (для каждого режима).
Bin – двоичные строки для чисел от 0 до 255.
MC – Информация о формате (для каждого уровня коррекции ошибок)
NumericTable – вспомогательная таблица для кодирования в числовой режим;
AlphanumericTable - вспомогательная таблица для кодирования в алфавитно-числовой режим;
Шаблоны символов хранятся в виде двоичных данных размером Ширина*Высота*2, т.е. на каждый элемент в шаблоне отводится два байта. Состав шаблона:
- 51001 – черная клетка
- 51002 – белая клетка
- 51003 – черная клетка квадратов поиска
- 51004 – белая клетка квадратов поиска
- 50000-50014 – информация о формате
- 0-49999 – информация о данных в виде: НомерБайта*10 + НомерБита. Байты нумеруются с единицы, биты нумеруются с нуля.
Например, шаблон символа версии 1 (21х21) занимает 882 байта и выглядит следующим образом:
После наложения закодированных данных на шаблон получается матрица размером Ширина*Высота, т.е. на каждый элемент в матрице отводится 1 байт. Состав матрицы:
- 0 - белая клетка
- 1 - черная клетка
- 2 - белая клетка квадрата поиска
- 3 - черная клетка квадрата поиска
Например, результирующая матрица символа версии 1 (21х21) имеет размер 441 байт:
Используя данные из матрицы можно построить:
- SVG-изображение
- HTML-элемент Table
- Табличный документ и т.д.
Примечания
- По стандарту ISO 18004 нужно сформировать восемь вариантов штрихкодов (используя разные xor-маски) и среди них выбрать "лучший". Но в нашей обработке, учитывая небольшую скорость вычислений в 1С, формируется только один вариант. Номер xor-маски можно указать в параметре "Маска".
- Перед кодированием данных выбирается один режим, в котором данные могут быть закодированы (числовой, алфавитно-числовой, байтовый). Далее данные кодируются в этом режиме. Переключения из режима в режим (для уплотнения данных) не предусмотрены.