Прямоугольный Micro QR-код

Прямоугольный Micro QR-код (англ. Rectangular Micro QR Code, также известен как rMQR Code) — это двумерный матричный штрихкод, изобретённый и стандартизированный в 2022 году[1] компанией Denso Wave (подразделение корпорации Denso), и стандартизированный как ISO/IEC 23941[2]. rMQR Code представляет собой прямоугольный вариант QR-кода и сохраняет его основные параметры и область применения. Однако, в отличие от классического QR-кода, rMQR Code рассчитан на прямоугольные области, и разница между шириной и высотой в максимальной версии R7x139 достигает 19 раз. Это позволяет применять его там, где раньше использовались линейные (1D) штрихкоды. rMQR Code также может полноценно заменить штрихкоды Code 128 и Code 39, обеспечивая более эффективное кодирование данных.

Структурно rMQR Code состоит из чёрных квадратов и белых квадратных промежутков, размещённых на белом фоне в квадратной сетке. Содержит основной элемент наведения (finder pattern) в левом верхнем углу (аналогичный QR-коду), а также дополнительный малый элемент наведения в правом нижнем углу. Присутствуют элементы выравнивания и синхронизации для повышения устойчивости к ошибкам. rMQR Code использует коррекцию ошибок Рида — Соломона с возможностью восстановления данных из повреждённых кодов. Как и другие двумерные матричные штрихкоды, rMQR Code может быть считан камерными сканерами.

Аналогично обычному QR-коду, rMQR Code может кодировать символы Unicode с использованием механизма расширенной трактовки каналов (ECI), массивы байтов, а также непосредственно японские символы в кодировке кандзи. В максимальной версии R17x139 rMQR Code способен закодировать до 361 цифрового, 219 буквенно-цифровых, 150 байтовых и 92 кандзи-символов[3].

История и применение

Прямоугольный Micro QR-код был разработан компанией Denso Wave в 2022 году и стандартизован как ISO/IEC 23941. Этот формат расширяет возможности QR-кода для прямоугольных областей и создан как альтернатива линейным (1D) штрихкодам[4].

Сегодня rMQR Code — относительно новое решение, пока не получившее широкого распространения; однако он объединяет преимущества QR-кода (коррекция ошибок, поддержка Unicode) с достоинствами 1D-штихкодов (эффективная работа с прямоугольными областями). Поддержка данного типа кодов среди аппаратных принтеров и сканеров пока ограничена, однако программные библиотеки уже поддерживают rMQR Code[5][6]. Потенциальные области применения:

  • Реклама;
  • Автоматическая идентификация данных при обработке документов;
  • Автоматически распознаваемые гиперссылки на интернет-страницы;
  • Учёт продуктов питания и товаров в магазине;
  • Автоматизация билетов и документов пассажиров в аэропортах, на автобусных и железнодорожных вокзалах;
  • Отслеживание посылок[7];
  • Идентификация пациентов либо лекарств в медицинском обслуживании и промышленности[8].

Ключевыми преимуществами rMQR Code являются:

  • Возможность прямого кодирования японских символов;
  • Эффективное использование прямоугольных областей, полная замена 1D-штрихкодов;
  • Поддержка кодирования GS1-данных[9];
  • Поддержка Extended Channel Interpretation;
  • Коррекция ошибок Рида — Соломона для восстановления повреждённых данных.

Особенности кода

Прямоугольный Micro QR-код создан с целью более эффективного использования прямоугольных областей, сохраняя все функциональные возможности QR-кода. Символ состоит из чёрных и белых квадратных модулей, размещённых на белом фоне. Также существует инверсная версия штрихкода — с чёрным фоном и инвертированными (по светлоте) элементами[2].

rMQR Code характеризуется минимальной высотой 7X и минимальной шириной 27X; максимальная высота — 17X, максимальная ширина — 139X[2]. Всего предусмотрено 32 версии с разными соотношениями сторон. Коррекция ошибок Рида — Соломона реализована на двух уровнях, обеспечивая восстановление от 15 % до 30 % повреждённых данных.

Элементы структуры символа rMQR Code:[2][10]

  • Основная направляющая метка (finder pattern) в левом верхнем углу с 1X-разделителем справа и снизу — совпадает с QR-кодом;
  • Малый элемент наведения (finder sub pattern) в правом нижнем углу;
  • Угловые элементы наведения в правом верхнем и левом нижнем углах; размеры до 3×3;
  • Элементы выравнивания (количество зависит от версии: отсутствуют в R11x27, до 8 в R11x139);
  • Синхронизационные элементы, образующие рамку по периметру;
  • Зона форматной информации вокруг основных элементов наведения;
  • Зона кодирования данных;
  • Тихая зона шириной 2X.

Примеры rMQR Code разных версий:

Версии

Прямоугольный Micro QR-код реализован в 32 версиях, с высотой от 7X до 17X и шириной от 27X до 139X. Каждая версия поддерживает два уровня коррекции ошибок: M и H, что влияет на максимальный объём закодированных данных и стойкость к ошибкам. Все версии и их параметры приведены в таблице ниже[2]:7.4.10:

Версии прямоугольного Micro QR-кода (rMQR Code)
Версия Индикатор версии Уровень коррекции ошибок Кодовые слова данных Кодовые слова коррекции ошибок Ёмкость данных
Числовая Буквенно-цифровая Байт Кандзи
R7x43 0 M 6 7 12 7 5 3
H 3 10 5 3 2 1
R7x59 1 M 12 9 26 16 11 6
H 7 14 14 8 6 3
R7x77 2 M 20 12 45 27 19 11
H 10 22 21 13 9 5
R7x99 3 M 28 16 64 39 27 16
H 14 30 30 18 13 8
R7x139 4 M 44 24 102 62 42 26
H 24 44 54 33 22 14
R9x43 5 M 12 9 26 16 11 6
H 7 14 14 8 6 3
R9x59 6 M 21 12 47 29 20 12
H 11 22 23 14 10 6
R9x77 7 M 31 18 71 43 30 18
H 17 32 37 23 16 9
R9x99 8 M 42 24 97 59 40 25
H 22 44 49 30 20 12
R9x139 9 M 63 36 147 89 61 38
H 33 66 75 46 31 19
R11x27 10 M 7 8 14 8 6 3
H 5 10 9 6 4 2
R11x43 11 M 19 12 42 26 18 11
H 11 20 23 14 10 6
R11x59 12 M 31 16 71 43 30 18
H 15 32 33 20 14 8
R11x77 13 M 43 24 33 20 14 8
H 23 44 52 31 21 13
R11x99 14 M 57 32 133 81 55 34
H 29 60 66 40 27 17
R11x139 15 M 84 48 198 120 82 51
H 42 90 97 59 40 25
R13x27 16 M 12 9 26 16 11 6
H 7 14 14 8 6 3
R13x43 17 M 27 14 62 37 26 16
H 13 28 28 17 12 7
R13x59 18 M 38 22 88 53 36 22
H 20 40 45 27 18 11
R13x77 19 M 53 32 124 75 51 31
H 29 56 66 40 27 17
R13x99 20 M 73 40 171 104 71 44
H 35 78 80 49 33 20
R13x139 21 M 106 60 251 152 104 64
H 54 112 126 76 52 32
R15x43 22 M 33 18 76 46 31 19
H 15 36 33 20 13 8
R15x59 23 M 48 26 112 68 46 28
H 26 48 59 36 24 15
R15x77 24 M 67 36 157 95 65 40
H 31 72 71 43 29 18
R15x99 25 M 88 48 207 126 86 53
H 48 88 111 68 46 28
R15x139 26 M 127 72 301 182 125 77
H 69 130 162 98 67 41
R17x43 27 M 39 22 90 55 37 23
H 21 40 47 28 19 12
R17x59 28 M 56 32 131 79 54 33
H 28 60 63 38 26 16
R17x77 29 M 78 44 183 111 76 47
H 38 84 87 53 36 22
R17x99 30 M 100 60 236 143 98 60
H 56 104 131 79 54 33
R17x139 31 M 152 80 361 219 150 92
H 76 156 178 108 74 46

Элементы наведения

Прямоугольный Micro QR-код использует три типа элементов наведения:

  • Основной элемент наведения[2] в левом верхнем углу с 1X-разделителем справа и снизу;
  • Малый элемент наведения[2] в правом нижнем углу;
  • Угловые элементы наведения[2] в правом верхнем и левом нижнем углах.

Главный элемент наведения (5 модулей в вертикали и горизонтали: 1-1-3-1-1) определяет местоположение штрихкода и при повреждении делает его нечитаемым. Малый элемент (1-1-1-1-1) определяет правый нижний угол и не имеет защитной зоны. Угловые элементы — это уголки с белой точкой по центру (3×3); в некоторых версиях могут отсутствовать.

Выравнивающие и синхронизационные элементы

rMQR Code содержит элементы выравнивания[2] и синхронизации[2] для выявления ошибок распознавания. Элемент выравнивания — чёрный прямоугольник 3X, обрамляющий белую точку 1X. Количество зависит от версии (от 0 до 8).

Количество элементов выравнивания
Ширина Число элементов
27 0
43 2
59 4
77 4
99 6
139 8

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

Форматная информация

Форматная информация[2] размещается в областях основных и малых элементов наведения. Формат — это 18-битная последовательность: 6 информационных бит, 12 бит коррекции ошибок (рассчитанных по (18,6) расширенному BCH-коду). Маскирование производится последовательностями 011111101010110010 (для зоны вокруг основного элемента) и 100000101001111011 (для малого элемента).

Информационные биты форматной зоны rMQR Code
Уровень коррекции ошибок Индикатор версии Биты коррекции ошибок

Первый бит определяет уровень коррекции ошибок, следующие 5 бит — индикатор версии.

Индикаторы уровня коррекции ошибок
Уровень коррекции ошибок Двоичный индикатор
M 0
H 1

Коррекция ошибок

Прямоугольный Micro QR-код использует корректирующий код Рида — Соломона[2] с двумя уровнями (M, H) с восстановлением около 15 и 30 % повреждённой площади соответственно. Все данные разбиваются на (1-4) блока кодовых слов, к каждому блоку добавляются слова коррекции ошибок, после чего блоки объединяются.

Уровни коррекции ошибок
Уровень коррекции ошибок Восстановление данных, %
M 15 %
H 30 %

Всё кодирование выполняется по конечному полю или GF(28), элементы которого кодируются как 8-битные байты с числовым значением (байт кодирует , где  — примитивный элемент, удовлетворяющий ). Примитивный многочлен: , номер 285.

Маскирование и размещение данных

Размещение данных осуществляется, как и в QR-коде, в двухмодульных столбцах[2], начиная с правого нижнего угла вверх и вниз, переходя справа налево.

Перед размещением данные подвергаются маскированию[2] единственным типом маски (в отличие от 8 в традиционном QR-коде):
, где
i — номер строки;
j — номер столбца.

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

Если ёмкость символа не делится нацело на 8 бит, то оставшиеся (1-7) разрядов заполняются нулями.

Кодирование

В максимальной версии R17x139 rMQR Code может содержать до 361 цифры, 219 буквенно-цифровых символов, 150 байт или 92 иероглифа кандзи[11]. Также поддерживается кодирование Unicode с использованием Extended Channel Interpretation и кодирование данных GS1[9].

Доступно 8 режимов кодирования[2]: 4 основных (данные), 3 служебных (в том числе ECI), завершает последовательность специальный режим Terminator.

Режимы кодирования и их индикаторы (rMQR)
Режим Индикатор режима (3 бита)
Числовой 001
Буквенно-цифровой 010
Байт 011
Кандзи 100
FNC1 101 (первая позиция)
110 (вторая позиция)
ECI 111
Terminator
(конец сообщения)
000

Чаще всего в rMQR Code применяется смешанный режим кодирования[2], позволяющий оптимизировать компактность.

Структура смешанного режима (rMQR)
Сегмент 1 ECI-заголовок 1 Сегмент 2 Сегмент 3 Terminator
Режим 1 Счётчик Данные ECI режим 1 ECI-дизигнатор Режим 2 Счётчик Данные Режим 3 Счётчик Данные

Для каждого режима в зависимости от версии[2] выбирается количество бит для счётчика символов.

Количество бит счётчика символов
Версия Числовой Буквенно- Байт Кандзи Версия Числовой Буквенно- Байт Кандзи
R7x43 4 3 3 2 R13x27 5 5 4 3
R7x59 5 5 4 3 R13x43 6 6 5 5
R7x77 6 5 5 4 R13x59 7 6 6 5
R7x99 7 6 5 5 R13x77 7 7 6 6
R7x139 7 6 6 5 R13x99 8 7 7 6
R9x43 5 5 4 3 R13x139 8 8 7 7
R9x59 6 5 5 4 R15x43 7 6 6 5
R9x77 7 6 5 5 R15x59 7 7 6 5
R9x99 7 6 6 5 R15x77 8 7 7 6
R9x139 8 7 6 6 R15x99 8 7 7 6
R11x27 4 4 3 2 R15x139 9 8 7 7
R11x43 6 5 5 4 R17x43 7 6 6 5
R11x59 7 6 5 5 R17x59 8 7 6 6
R11x77 7 6 6 5 R17x77 8 7 7 6
R11x99 8 7 6 6 R17x99 8 8 7 6
R11x139 8 7 7 6 R17x139 9 8 8 7

Числовой режим

В числовом режиме[2] штрихкод кодирует только цифры 0-9: каждые 3 цифры преобразуются в 10 бит, последние 2 — в 7 бит, последняя 1 — в 4. Префикс — индикатор режима 001, затем счётчик, затем битовая последовательность.

Пример кодирования в числовом режиме
Количество цифр Бит Пример Биты
3 10 734 1011011110
3 10 001 0000000001
2 7 72 1001000
1 4 5 00101

Буквенно-цифровой режим

В данном режиме[2] каждую пару символов кодируют в 11 бит по формуле:

Таблица символов букво-цифрового режима
Значение Символ Значение Символ Значение Символ Значение Символ Значение Символ
0 0 9 9 18 I 27 R 36 пробел
1 1 10 A 19 J 28 S 37 $
2 2 11 B 20 K 29 T 38 %
3 3 12 C 21 L 30 U 39 *
4 4 13 D 22 M 31 V 40 +
5 5 14 E 23 N 32 W 41 -
6 6 15 F 24 O 33 X 42 .
7 7 16 G 25 P 34 Y 43 /
8 8 17 H 26 Q 35 Z 44 :

Один символ кодируется в 6 бит. Префикс — индикатор 010.

Байт-режим

В этом режиме[2] добавляется индикатор 011, счётчик байтов (в зависимости от версии) и байтовая последовательность (8 бит на байт).

Кандзи-режим

Для иероглифов из набора JIS X 0208[2] кодируются последовательности длиной 13 бит по следующему алгоритму:

  • Для Shift JIS-значений 0x8140-0x9FFC:
  1. вычесть 0x8140;
  2. старший байт умножить на 0xC0;
  3. результат сложить с младшим байтом;
  4. перевести в 13-битный двоичный код.
  • Для Shift JIS-значений 0xE040-0xEBBF — отняв 0xC140 и аналогично.

Индикатор — 100, затем счётчик.

Кодирование Unicode с помощью ECI

Для Unicode используется расширенная трактовка каналов[2] (ECI). Сначала кодируется ECI-дизигнатор, затем байтовый массив данных. По умолчанию задан ECI-дизигнатор \000003(ISO/IEC 8859-1).

Индикатор — 111, затем номер кодировки в 8/16/24 бит (см. таблицу):

Кодирование номера ECI-дизигнатора
Значение Число кодовых слов Кодовые слова
000000-000127 1 0bbbbbbb
000000-016383 2 10bbbbbb bbbbbbbb
000000-999999 3 110bbbbb bbbbbbbb bbbbbbbb
b — биты значения ECI Assignment

Кодирование GS1

Для передачи данных GS1 используется режим «FNC1 в первой позиции»[2] — индикатор 101. FNC1 в rMQR Code не может быть разделён, как в Code 128, вместо этого применяют символ «%» в буквенно-цифровом режиме или GS (0x1D) в байтовом. Для кодирования «%» в букво-цифровом режиме символ удваивается (%%), а после декодирования передаётся как один символ «%»[9].

FNC1 во второй позиции

Режим FNC1 во второй позиции[2] сейчас используется только для обратной совместимости. Исторически применялся для передачи идентификатора режима в Code 128, если FNC1 встречался во втором слове. См. ISO/IEC 15417[12], приложение B.

rMQR Code кодирует FNC1 во второй позиции как индикатор 111, далее 8-битный идентификатор приложения и данные.

Примечания