Прямоугольный 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:
| Версия | Индикатор версии | Уровень коррекции ошибок | Кодовые слова данных | Кодовые слова коррекции ошибок | Ёмкость данных | |||
|---|---|---|---|---|---|---|---|---|
| Числовая | Буквенно-цифровая | Байт | Кандзи | |||||
| 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 (для малого элемента).
| Уровень коррекции ошибок | Индикатор версии | Биты коррекции ошибок | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Первый бит определяет уровень коррекции ошибок, следующие 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.
| Режим | Индикатор режима (3 бита) |
|---|---|
| Числовой | 001 |
| Буквенно-цифровой | 010 |
| Байт | 011 |
| Кандзи | 100 |
| FNC1 | 101 (первая позиция) |
| 110 (вторая позиция) | |
| ECI | 111 |
| Terminator (конец сообщения) |
000 |
Чаще всего в rMQR Code применяется смешанный режим кодирования[2], позволяющий оптимизировать компактность.
| Сегмент 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:
- вычесть 0x8140;
- старший байт умножить на 0xC0;
- результат сложить с младшим байтом;
- перевести в 13-битный двоичный код.
- Для Shift JIS-значений 0xE040-0xEBBF — отняв 0xC140 и аналогично.
Индикатор — 100, затем счётчик.
Для Unicode используется расширенная трактовка каналов[2] (ECI). Сначала кодируется ECI-дизигнатор, затем байтовый массив данных. По умолчанию задан ECI-дизигнатор \000003(ISO/IEC 8859-1).
Индикатор — 111, затем номер кодировки в 8/16/24 бит (см. таблицу):
| Значение | Число кодовых слов | Кодовые слова |
|---|---|---|
| 000000-000127 | 1 | 0bbbbbbb |
| 000000-016383 | 2 | 10bbbbbb bbbbbbbb |
| 000000-999999 | 3 | 110bbbbb bbbbbbbb bbbbbbbb |
| b — биты значения ECI Assignment | ||
Для передачи данных GS1 используется режим «FNC1 в первой позиции»[2] — индикатор 101. FNC1 в rMQR Code не может быть разделён, как в Code 128, вместо этого применяют символ «%» в буквенно-цифровом режиме или GS (0x1D) в байтовом. Для кодирования «%» в букво-цифровом режиме символ удваивается (%%), а после декодирования передаётся как один символ «%»[9].
Режим FNC1 во второй позиции[2] сейчас используется только для обратной совместимости. Исторически применялся для передачи идентификатора режима в Code 128, если FNC1 встречался во втором слове. См. ISO/IEC 15417[12], приложение B.
rMQR Code кодирует FNC1 во второй позиции как индикатор 111, далее 8-битный идентификатор приложения и данные.


