Как работает QR-код: принцип кодирования и считывания
QR-код работает по принципу двумерного штрихового кода: данные кодируются в матрицу чёрных и белых квадратиков-модулей, а камера смартфона или сканер считывают изображение, определяют положение и ориентацию матрицы, затем декодируют последовательность битов обратно в текст, ссылку или другую информацию.
Структура QR-кода
Матрица содержит несколько функциональных зон. Три угловых квадрата-маркера (паттерны поиска) позволяют сканеру мгновенно найти код и определить его ориентацию. Четвёртый элемент, небольшой паттерн выравнивания в правом нижнем углу, компенсирует искажения при съёмке под углом. Полоски синхронизации по горизонтали и вертикали задают сетку модулей. Оставшаяся площадь отведена под данные и байты коррекции ошибок. Белая «тихая зона» вокруг всей матрицы необходима, чтобы сканер не спутал границу кода с окружающим фоном. Размер матрицы задаётся версией: версия 1 это 21x21 модуль, версия 40 — 177x177 модулей, что вмещает до 7089 цифр или 4296 символов ASCII.
Как данные кодируются в модули
Перед записью данных алгоритм выбирает режим кодирования: числовой (10 бит на три цифры), буквенно-цифровой, байтовый или кандзи. Числовой режим наиболее компактен, поэтому URL и телефонные номера часто сначала сокращают сервисами коротких ссылок. После кодирования полезных данных добавляются байты коррекции ошибок по алгоритму Рида–Соломона. Уровень коррекции L восстанавливает до 7% повреждённых данных, уровень H — до 30%. Именно это позволяет сканировать слегка испачканные или частично перекрытые логотипом коды. Итоговая битовая последовательность «маскируется»: применяется одна из восьми XOR-масок, чтобы избежать больших однотонных областей, которые затрудняют считывание.
Как сканер декодирует изображение
Процесс считывания проходит несколько этапов. Сначала камера фиксирует изображение и программа переводит его в чёрно-белое по порогу яркости. Затем алгоритм ищет три угловых маркера по характерному соотношению пикселей 1:1:3:1:1 в любом направлении. Найдя маркеры, программа вычисляет геометрическое преобразование, выравнивает матрицу и определяет значение каждого модуля. Считанные биты разбиваются на блоки данных и блоки коррекции. Декодер Рида–Соломона исправляет ошибки и восстанавливает исходные байты. Наконец, байты переводятся обратно в символы выбранного режима кодирования.
QR-коды в российском деловом обороте
В России QR-коды стали стандартом в системе быстрых платежей (СБП): каждый платёжный код содержит реквизиты получателя в формате EMVCo и зашифрованную сумму. По данным Банка России, в 2023 году через СБП проведено более 13 млрд транзакций, и QR-оплата занимает в этом объёме существенную долю. Федеральная налоговая служба использует QR-коды на кассовых чеках: в квадратике зашифрованы фискальные реквизиты, дата, сумма и адрес проверки на портале ФНС. Система «Честный знак» обязывает наносить DataMatrix-коды на лекарства, табак, молочную продукцию и другие товарные группы; это двумерный код, работающий по схожему принципу. Знание устройства QR-кода помогает бизнесу грамотно выбирать версию кода, уровень коррекции и избегать ошибок при размещении кодов на упаковке или полиграфии.