Код Хань Синя

Код Хань Синя (кит. 汉信码, англ. Han Xin code, букв. «код, чувствительный к китайскому») — двумерная (2D) матричная штрихкодовая символика, разработанная в 2007 году[1] китайской компанией Центр нумерации товаров Китая[2] (кит. 中国物品编码中心), с целью преодоления монополии QR-кода. Как и QR-код, код Хань Синя состоит из чёрных и белых квадратов, расположенных по квадратной сетке на белом фоне. Он имеет четыре поисковых шаблона и другие маркеры, обеспечивающие распознавание с помощью камерных сканеров. Код Хань Синя поддерживает коррекцию ошибок Рида-Соломона, что позволяет распознавать повреждённые изображения. В настоящее время стандартизован как ISO/IEC 20830:2021[3].

История и стандарты

Центр нумерации товаров Китая (кит. 中国物品编码中心) начал исследования[4] во время 10-й пятилетки Китая над собственным форматом 2D-штрихкодов, чтобы заменить QR-коды, считавшиеся японской монополией в области двумерных кодов. В 2007 году появился национальный стандарт GB/T 21049-2007[1], получивший название «чувствительный к китайскому» (Chinese-sensible code).

В 2011 году[5] американская организация AIM выпустила собственную спецификацию ISS Han Xin Code как официальный стандарт кодирования и разместила его в своём хранилище[6].

В 2015 году рабочая группа ISO/IEC JTC 1/SC 31 начала работу[7] по стандартизации кода Хань Синя на международном уровне, что вылилось в публикацию ISO/IEC 20830:2021[3] в 2021 году.

В 2022 году национальный стандарт был пересмотрен как GB/T 21049-2022[8] и получил название «Код Хань Синя» для согласования с международным стандартом ISO.

Ниже приведены патенты, связанные с кодированием и декодированием кода Хань Синя, зарегистрированные в Европе и США:

  • Европейский патент EP3330887B1 (Fujian Landi Commercial Equipment Co Ltd), «Метод и система обнаружения шаблона признака китайскочувствительного кода»[9]
  • Патент США US10095903B2 (Ingenico Fujian Technology Co Ltd), «Метод и система блочного декодирования двумерного кода»[10]
  • Патент США US10528781B2 (Ingenico Fujian Technology Co Ltd), «Метод и система обнаружения характерных шаблонов для кода Хань Синя»[11]

Применение

Код Хань Синя применяется аналогично QR-коду. В настоящее время наибольшее распространение получил в Китае[12], поскольку поддерживает прямое кодирование китайских иероглифов. Однако его поддерживают большинство штрихкод-принтеров[13] и сканеров штрихкодов[14]. Считывание кода Хань Синя реализовано на устройствах с iOS[15] и Android[16], а также в ряде библиотек для работы со штрихкодами[17][18].

Основные достоинства кода Хань Синя:

  • встроенное кодирование китайских иероглифов[19];
  • поддержка ECI;
  • встроенное компактное кодирование UTF-8 сжатие без потерь;
  • отдельный компактный режим для кодирования URI;
  • компактное кодирование данных с идентификаторами GS1 наряду с QR-кодом;
  • полная поддержка ISO/IEC 646 для компактной цифровой и текстовой записи.

Конструкция штрихкода

undefined

Код Хань Синя представляет данные с помощью чёрных и белых квадратных модулей, где тёмный модуль соответствует единице, а светлый — нулю. Также существуют варианты кодировки в инвертированных цветах[3], но по умолчанию большинство сканеров поддерживают только стандартное отображение. Размер области — от 23 × 23 модулей (версия 1) до 189 × 189 (версия 84). В отличие от DataMatrix, код Хань Синя не имеет прямоугольных форматов, что ограничивает область его применения. Размер символа вычисляется по формуле:

Штрихкод состоит из следующих элементов:[3]

  • Тихая зона — внешняя граница по периметру не менее 3X;
  • Поисковый шаблон — четыре позиционных маркера по углам, определяют расположение кода;
  • Выравнивающие шаблоны и вспомогательные выравнивающие шаблоны — с версии 4, улучшают декодирование искажённых кодов;
  • Области структурной информации — вокруг поисковых шаблонов, кодируют параметры версии, маски и коррекции ошибок;
  • Области данных — зашифрованные бинарные данные чёрно-белыми модулями.

Поисковый шаблон

undefined

Поисковый шаблон[3] — четыре позиционных маркера, размещённых по углам кода. Размер составляет 7×7 модулей, структура — 5 слоёв (тёмный 7×7, светлый 6×6, тёмный 5×5, светлый 4×4, тёмный 3×3).

Отношение размеров (сканируемых полос) — 1:1:1:1:3 или 3:1:1:1:1 (зависит от направления считывания), ориентация позволяет однозначно определить местоположение и поворот кода.

Каждый поисковый шаблон отделён сепаратором[3], примыкающим к области структурной информации.

Выравнивающий шаблон

Выравнивающие шаблоны[3] применяются с версии 4 (в версиях 1–3 их нет) и служат для точного определения ячеек в искажённых кодах. Типы:

  • Выравнивающий шаблон — пошаговые выравнивающие линии;
  • Вспомогательный выравнивающий шаблон — 6 модулей (5 светлых, 1 тёмный).

Выравнивающая линия — это тёмная линия и светлая полоска под ней по ширине одного модуля. Вспомогательный шаблон указывает границу области.

Примеры размещения выравнивающих шаблонов в разных версиях приведены ниже.

Область структурной информации

undefined

Область структурной информации[3] представляет собой однорядную полосу вокруг поисковых шаблонов. В коде Хань Синя две идентичные структуры, каждая из 34 модулей — по 17 вокруг каждого шаблона.

Записанная информация[3]:

  • Версия + 20 (биты 0–7);
  • Уровень коррекции ошибок (биты 8–9);
  • Маска (биты 10–11);
  • Данные коррекции Рида-Соломона (биты 12–27);
  • Биты 28–33 игнорируются и могут быть любыми.

Метаинформация (биты 0–11) делится на тетрады (m2, m1, m0), добавляются 4 тетрады коррекции (r3…r0).

Биты структурной информации кода Хань Синя
Версия + 20 Уровень коррекции ошибок Индекс маски Коды коррекции ошибок
m2 m1 m0 r3 r2 r1 r0
X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27

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

Для приближения количества чёрных и белых модулей к отношению 1:1 применяется алгоритм маскирования[3] — последовательность маски применяется к области данных с помощью XOR. Области поисковых и выравнивающих шаблонов и структурной информации не маскируются. Алгоритмы маскировки приведены в таблице:

Алгоритмы маскирования кода Хань Синя
Условие маскирования Шаблон маски
Без маскирования 00
(i+j) mod 2=0 01
((i+j)mod 3+( j mod 3)) mod 2=0 10
(i mod j + j mod i + i mod 3 + j mod 3) mod 2=0 11

i — индекс строки, j — индекс столбца, считаются с 1,1 (верхний левый модуль). Если условие истинно, бит маски равен 1.

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

Код Хань Синя использует коррекцию ошибок Рида — Соломона. Данные представлены в виде массива байтов, который разбивается на блоки[3], для каждого блока вычисляются байты коррекции ошибок (codewords), которые добавляются к данным, а затем все блоки объединяются в общий поток.

Арифметика строится на многочлене конечного поля x^8 + x^6 + x^5 + x (355 или 101100011b), начальный корень = 1[3].

Количество байтов коррекции зависит от версии и уровня коррекции — от 16 до 60 %, что позволяет исправлять до 30 % повреждённых модулей[3].

Уровни коррекции ошибок кода Хань Синя
Уровень коррекции Доля восстановленных данных (%) Кодировка уровня коррекции
L1 8 % 00
L2 15 % 01
L3 23 % 10
L4 30 % 11

Область данных

Данные кодируются в массив байтов, который разбивается на блоки, для каждого блока рассчитываются байты коррекции. Затем блоки объединяются в массив[3].

(Данные) ⇒ (Блок коррекции 1) + ... + (Блок коррекции N) ⇒ (Массив codewords)

Пример: версия 5, уровень коррекции L4 — 27 codewords, 2 блока: (14, 20), (13, 22):

(D1...D14, D15...D27) ⇒ (D1...D14, E1.1...1.20) + (D15...D27, E2.1...2.22) ⇒ (D1...D14, E1.1...1.20, D15...D27, E2.1...2.22) ⇒ (C1...C69)

Далее массив делится по 13 байт, перемешивается по позиции…

В итоге codewords размещаются по строкам слева направо и сверху вниз: горизонтальный брак нарушает меньше байтов, вертикальный — больше.

Кодирование

В максимальной версии 84 код Хань Синя может закодировать 7827 цифр, 4350 латинских символов, 3261 байт или 1044–2174 китайских иероглифа[3]. Поддерживаются специальные режимы Unicode и промышленные режимы, которые могут смешиваться для лучшей компактности. Таблица ниже — ёмкость для различных версий и уровней коррекции:

Версии и информационная ёмкость кода Хань Синя
Версия Размер Уровень коррекции Кодовые слова данных Коды коррекции ошибок Цифры Текст Байты Китайские иероглифы
1 23×23 L1 21 4 45 26 18 6–12
L4 9 16 15 10 6 2–4
...
22 65×65 L1 354 68 843 470 351 113–234
L4 168 254 399 222 165 53–110
...
84 189×189 L1 3264 622 7827 4350 3261 1044–2174
L4 1554 2332 3723 2070 1551 497–1034

Режимы кодирования

Все режимы кодирования делятся на группы[3]:

  • Числовой (только цифры 0–9);
  • Текстовый (весь набор символов ISO/IEC 646);
  • Бинарный (байты 0–255);
  • Режимы китайских иероглифов (1587600 символов из GB 18030 в 4 режимах);
  • Режим Unicode с поддержкой ECI;
  • Unicode-адаптивный режим с UTF-8 и встроенным сжатием без потерь;
  • Режим GS1 (данные идентификаторов GS1);
  • Режим URI (ссылки с компактированием).
Режимы кода Хань Синя
Режим Индикатор режима Бит на символ
Числовой 0001b 3,3 (10 бит на три цифры)
Текст 0010b 6
Бинарный байтовый 0011b 8
Стандартные иероглифы, область 1 0100b 12
Стандартные иероглифы, область 2 0101b 12
GB18030, 2-байтовая область 0110b 15
GB18030, 4-байтовая область 0111b 21
ECI 1000b переменно (мультибайт)
Unicode 1001b адаптивно (сжатие без потерь)
GS1 11100001b переменно (цифровой+текстовый)
URI 11100010b переменно (2–7 бит на символ)

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

В числовом режиме[3] строка делится на блоки по три цифры (последний блок может быть короче) и кодируется по 10 бит (от 0 до 999). Префикс — 0001b, завершитель указывает количество цифр в конце.

Завершители числового режима кода Хань Синя
Цифр в последнем блоке Завершитель
1 1111111101b
2 1111111110b
3 1111111111b

Пример: последовательность 12700402:
Префикс → 0001b
127 → 0001111111
004 → 0000000100
02 → 0000000010
Завершитель → 1111111110b

Текстовый режим

Текстовый режим кодирует символы ISO/IEC 646, каждый символ — 6 бит[3]. Есть два подрежима: Text1 (буквы и цифры), Text2 (знаки препинания, спецсимволы). Переключение — 11110b, завершитель — 111111b.

Подрежим Text1
Символ ASCII Значение Символ ASCII Значение Символ ASCII Значение
0 48 000000b L 76 010101b g 103 101010b
1 49 000001b M 77 010110b h 104 101011b
2 50 000010b N 78 010111b i 105 101100b
3 51 000011b O 79 011000b j 106 101101b
4 52 000100b P 80 011001b k 107 101110b
5 53 000101b Q 81 011010b l 108 101111b
6 54 000110b R 82 011011b m 109 110000b
7 55 000111b S 83 011100b n 110 110001b
8 56 001000b T 84 011101b o 111 110010b
9 57 001001b U 85 011110b p 112 110011b
A 65 001010b V 86 011111b q 113 110100b
B 66 001011b W 87 100000b r 114 110101b
C 67 001100b X 88 100001b s 115 110110b
D 68 001101b Y 89 100010b t 116 110111b
E 69 001110b Z 90 100011b u 117 111000b
F 70 001111b a 97 100100b v 118 111001b
G 71 010000b b 98 100101b w 119 111010b
H 72 010001b c 99 100110b x 120 111011b
I 73 010010b d 100 100111b y 121 111100b
J 74 010011b e 101 101000b z 122 111101b
K 75 010100b f 102 101001b
Подрежим Text2
Символ ASCII Значение Символ ASCII Значение Символ ASCII Значение
NUL 0 000000b NAK 21 010101b . 46 101010b
SOH 1 000001b SYN 22 010110b / 47 101011b
STX 2 000010b ETB 23 010111b : 58 101100b
ETX 3 000011b CAN 24 011000b ; 59 101101b
EOT 4 000100b EM 25 011001b < 60 101110b
ENQ 5 000101b SUB 26 011010b = 61 101111b
ACK 6 000110b ESC 27 011011b > 62 110000b
BEL 7 000111b SP 32 011100b ? 63 110001b
BS 8 001000b ! 33 011101b @ 64 110010b
HT 9 001001b 34 011110b [ 91 110011b
LF 10 001010b # 35 011111b \ 92 110100b
VT 11 001011b $ 36 100000b ] 93 110101b
FF 12 001100b % 37 100001b ^ 94 110110b
CR 13 001101b & 38 100010b _ 95 110111b
SO 14 001110b 39 100011b ` 96 111000b
SI 15 001111b ( 40 100100b { 123 111001b
DLE 16 010000b ) 41 100101b 124 111010b
DC1 17 010001b * 42 100110b } 125 111011b
DC2 18 010010b + 43 100111b ~ 126 111100b
DC3 19 010011b , 44 101000b DEL 27 111101b
DC4 20 010100b - 45 101001b

Бинарный режим

Бинарный режим кодирует произвольные байты 0–255. Формат: индикатор режима 0011b, 13-битный счетчик и последовательность 8-битных байт[3]. Завершителя не требуется.

Режимы китайских иероглифов

Это набор из 4 режимов для кодирования иероглифов GB 18030.

Режимы китайских иероглифов кода Хань Синя
Режим Индикатор Бит Число символов Описание
Область 1[3]:5.4.7 0100b 12 4074 Коды из GB 18030: байты B0–D7/A1–A3 и A1–FE для второго; A8A1–A8C0 (32 символа)
Область 2[3]:5.4.8 0101b 12 3008 Байты D8–F7 и A1–FE второго
GB18030, 2-байта[3]:5.4.9 0110b 15 23940 Байты 81–FE и 40–7E либо 80–FE
GB18030, 4-байта[3]:5.4.10 0111b 21 1587600 Байты: 81–FE; 30–39; 81–FE; 30–39

Unicode-режим

Unicode-режим[3] кодирует UTF-8 с встроенным сжатием без потерь. Алгоритм сам определяет структуру: последовательности по 1–4 байта анализируются и сжимаются по повторяющимся префиксам языковых блоков (кириллица, греческие и т. д.), чтобы кодировать только отличия.

GS1-режим

GS1-режим[3] начинается с флага 11100001b, завершитель — 11111111b. Данные делятся на идентификаторы GS1 и компактируются смешанными режимами. Пример: (10)123456ABC<FNC1>(240)DATA кодируется как:
⟨11100001b⟩ ⟨Числовой 10123456⟩ ⟨Текст ABC⟩ ⟨Числовой⟩ ⟨1111101000b (FNC1)⟩ ⟨Числовой 240⟩ ⟨Текст DATA⟩ ⟨11111111b⟩

URI-режим

URI-режим[3] предназначен для компактного кодирования ссылок. Использует собственные подрежимы URI-A, URI-B, URI-C[3], а также подрежим Percent-Encoding для %XX-последовательностей.

Подрежимы URI кодирования Хань Синя
Набор Индикатор
URI-A 001b
URI-B 010b
URI-C 011b
Percent-Encoding 100b
Завершитель режима URI 111b

Percent-Encoding — для последовательностей %XX (8 бит). Начать с 100b, затем байты длины (длина %XX разделить на 3), после чего — байты значения (например, %FF → xFF).

Символы URI-A и URI-B
Набор URI-A Набор URI-B
Символ / фрагмент Кодовое значение Биты Символ / фрагмент Кодовое значение Биты
a 0 000000 A 0 000000
b 1 000001 B 1 000001
Terminator A 63 111111 Terminator B 63 111111
Набор символов URI-C
Символ / фрагмент Значение Биты Символ / фрагмент Значение Биты Символ / фрагмент Значение Биты
A 0 0000000 R 43 0101011 ; 86 1010110
Terminator C 127 1111111

Примечания

  1. 1 2 GB/T. GB/T 21049-2007 "Chinese-sensible code" (кит.). www.chinesestandardslibrary.com. GB National Standard (2007). Дата обращения: 28 июня 2024. Архивировано 18 января 2025 года.
  2. 中国物品编码中心 (The Article Numbering Center of China) (кит.). www.ancc.org.cn. Дата обращения: 28 июня 2024.
  3. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ISO/IEC. ISO/IEC 20830:2021 "Information technology Automatic identification and data capture techniques Han Xin Code bar code symbology specification". iso.org. International Organization for Standardization (2021). Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  4. 中国主导的首个二维码码制国际标准正式发布 (Первый международный стандарт для QR-кодов, инициированный Китаем, официально опубликован) (кит.). www.ancc.org.cn. 中国物品编码中心 (31 августа 2021). Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  5. RFID и AIDC: новая символика для штрихкодов с двойными байтами. www.scdigest.com. Supply Chain Digest. Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  6. ISS Han Xin Code symbology specification — Rev. 3.0. aimglobal.org. AIM Global. Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  7. 汉信码正式成为国际ISO标准工作项目 (Код Хань Синя официально стал проектом международного стандарта ISO) (кит.). www.ancc.org.cn. 中国物品编码中心 (16 сентября 2015). Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  8. GB/T. GB/T 21049-2022 "Han Xin code" (кит.). www.chinesestandard.net. GB National Standard (2022). Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  9. European Patent Office EP3330887B1 by Fujian Landi Commercial Equipment Co Ltd "Chinese-sensitive code feature pattern detection method and system". patents.google.com. European Patent Office (2 августа 2016). Дата обращения: 28 июня 2024.
  10. United States Patent US10095903B2 by Ingenico Fujian Technology Co Ltd "Block decoding method and system for two-dimensional code". patents.google.com. United States Patent and Trademark Office (15 января 2018). Дата обращения: 28 июня 2024.
  11. United States Patent US10528781B2 by Ingenico Fujian Technology Co Ltd "Detection method and system for characteristic patterns of Han Xin codes". patents.google.com. United States Patent and Trademark Office (13 февраля 2018). Дата обращения: 28 июня 2024.
  12. Han Xin Code. www.ancc.org.cn. GS1 China. Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  13. PC42D Desktop Direct Thermal Barcode Printer. www.honeywell.com. Дата обращения: 28 июня 2024. Архивировано 26 января 2021 года.
  14. Unitech MS852B. dcs.aero. Дата обращения: 28 июня 2024. Архивировано 18 января 2025 года.
  15. Han Xin Code (кит.). han-xin-code.appstor.io. Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  16. 中国的二维码,您用了吗 (Пользовались ли вы китайским QR-кодом?) (кит.). www.ancc.org.cn. 中国物品编码中心 (2 сентября 2013). Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  17. Генерация Han Xin Code в C#. www.aspose.com. Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  18. AIM International Technical Specification – Han Xin Code Encoding Library for .Net. github.com. Дата обращения: 28 июня 2024. Архивировано 3 июля 2025 года.
  19. Xiaolei Yu. Semi-physical Verification Technology for Dynamic Performance of Internet of Things System / Xiaolei Yu, Donghua Wang, Zhimin Zhao. — Springer, 2018. — P. 181. — ISBN 978-9811317590.

Литература