На наклейке потёрлись чёрные квадратики, поверх кода легло пятно, а телефон всё равно открывает нужную страницу. Кажется, будто он догадался, чего не хватает. На самом деле возможность пережить часть повреждений заложена в устройство QR-кода заранее.
Его создатели исходили не из идеальной картинки на экране, а из заводской этикетки, которая может испачкаться маслом, оказаться под неудобным углом к сканеру и промелькнуть перед сканером на движущейся детали. Чтобы прочитать такую метку, мало просто вместить в неё ссылку или номер. Нужно ещё быстро найти узор и сохранить информацию, даже когда часть рисунка испорчена.

Код, придуманный не для меню
Сегодня QR-код привычнее видеть на столике кафе, билете или рекламном плакате. Но появился он в автомобильной промышленности. Компания DENSO представила разработку в 1994 году, когда производству требовался более удобный способ учитывать детали и сопровождающие их данные.
Инженер Масахиро Хара, руководивший разработкой, вспоминал, что сотрудники порой считывали около десяти обычных штрихкодов подряд с одного изделия. Информации становилось больше, а сама процедура отнимала слишком много времени. Дополнительную проблему создавали загрязнения: масляное пятно могло сделать маркировку нечитаемой.
Переход от полос к квадратной сетке давал больше места для записи. Однако Хара и его коллега стремились не просто увеличить вместимость: новый код должен был считываться быстро. Это намерение осталось в названии: QR означает Quick Response, «быстрый отклик».
Так возникло сочетание, которое мы теперь воспринимаем как само собой разумеющееся: компактная метка, узнаваемые угловые квадраты и математическая защита данных. Устойчивость к повреждениям здесь не приятный побочный эффект, а ответ на реальные условия работы.
Что скрывается в чёрно-белой сетке
Обычный линейный штрихкод передаёт информацию последовательностью полос и промежутков вдоль одного направления. В QR-коде для записи используются и строки, и столбцы. Маленький чёрный или белый квадратик называется модулем. Но отдельный модуль не равен отдельной букве: содержимое сначала кодируют последовательностью битов, добавляя служебную информацию.
QR-код может хранить не только интернет-адрес. Для него предусмотрены режимы записи чисел, ограниченного набора букв и знаков, байтов и японских иероглифов. Вместимость зависит от того, что именно записывают: длинная строка цифр и текст той же длины могут требовать разного объёма.
У привычного квадратного QR-кода есть 40 размеров сетки, которые называют версиями. Первая содержит 21 × 21 модуль, сороковая — 177 × 177. Каждая следующая версия добавляет по четыре модуля к стороне. Это не поколения технологии: более высокая версия означает прежде всего более вместительный символ.
При этом в сетке размещены не только полезные сведения. Часть элементов помогает сканеру разобраться в изображении, другая служит для проверки и восстановления данных. Поэтому подсчёт всех чёрных квадратиков ничего не скажет о длине ссылки: важны их расположение, правила кодирования и выбранный запас защиты.
Сначала найти, потом прочитать
Три крупных квадрата по углам работают как ориентиры. По ним программа находит символ среди текста и рисунков, определяет его положение и ориентацию. Поэтому наклейку не нужно каждый раз поворачивать «правильной стороной» к камере.
У этих маркеров есть характерная пропорция. Если провести линию через середину, ширины последовательных чёрных и белых участков соотносятся как 1:1:3:1:1. Разработчики искали рисунок, который редко встречается в обычных печатных материалах. Хара рассказывал, что для этого анализировал страницы газет и журналов: узнаваемый знак должен был быть не только простым, но и достаточно необычным.
Дальше нужно понять, где находятся отдельные клетки. Между угловыми маркерами проходят чередующиеся чёрно-белые полоски, помогающие определить шаг сетки. В большинстве версий есть и дополнительные небольшие квадратные маркеры выравнивания: они помогают учитывать искажения. Это другая задача, не та математическая коррекция, которая восстанавливает потерянное содержимое.
Наконец, вокруг символа оставляют свободное поле шириной не меньше четырёх модулей. Его называют тихой зоной. Текст или рамка, подступающие вплотную, мешают отделить код от фона. Получается, что пустое место тоже выполняет работу, хотя никаких букв в нём не зашифровано.

Восстановление без угадывания
После распознавания сетки начинается чтение данных. Вместе с ними в QR-код заранее записывают проверочную информацию, рассчитанную по определённым правилам. Для восстановления используют коды Рида — Соломона.
Идею можно почувствовать на простом примере. Пусть записаны числа 4, 7 и 9, а рядом их сумма: 20. Если стёрлась семёрка, остальные записи позволяют вычислить пропуск: 20 минус 4 минус 9. Дополнительная запись не повторяет каждое исходное число, но сохраняет связь между ними.
Конечно, такая сумма не заменяет настоящий код коррекции. Если неизвестно, какое из чисел прочитано неверно, одной проверки уже недостаточно. Коды Рида — Соломона устроены гораздо сложнее и используют несколько математических связей, позволяющих в определённых пределах обнаруживать и исправлять ошибки.
Поэтому телефон не дорисовывает ссылку по смыслу и не ищет внутри картинки запасную миниатюрную копию адреса. Он восстанавливает данные по проверочным соотношениям. Когда повреждений слишком много, этих сведений уже не хватает. Защита имеет конечный запас, а не способность угадывать всё подряд.
Почему нельзя стереть любые 30 процентов
При создании QR-кода выбирают уровень коррекции: L, M, Q или H. Для них DENSO WAVE приводит ориентиры восстановления около 7, 15, 25 и 30 процентов соответственно. Последнее число часто превращают в обещание: можно закрыть треть картинки, и она всё равно прочитается. Но это неверный перевод технического параметра на язык площади.
Проценты относятся к кодовым словам. Каждое такое слово в QR-коде состоит из восьми бит. Это не отдельный квадратик и не произвольный участок наклейки. Более того, в расчёт входят и слова с полезными данными, и проверочные: повреждение не выбирает только одну из этих групп.
Не менее важно, куда пришлось пятно. Закрытый участок с данными и испорченный угловой маркер создают разные проблемы. Если сканер не распознал сам символ или неправильно восстановил сетку, до исправления содержимого он может вообще не добраться.
Усиленная защита требует места. При неизменном размере сетки больше проверочной информации означает меньше места для полезной. Если содержимое нужно сохранить целиком, генератор может перейти к более высокой версии. А если такую более плотную сетку втиснуть в прежний размер на бумаге, отдельные модули станут мельче. Поэтому максимальный уровень коррекции сам по себе ещё не гарантирует лучший результат печати и съёмки.
Проверяем на одном адресе
Для иллюстрации мы создали QR-код со ссылкой на главную страницу Zagge и уровнем H. Получилась сетка версии 3, размером 29 × 29 модулей. Затем мы закрыли центральный участок белым квадратом 7 × 7 модулей, не затронув три крупных угловых маркера.
Исходный и изменённый варианты проверили программным декодером ZXing-C++. Оба вернули один и тот же адрес. Оба кода сохранили читаемость и на готовой иллюстрации.
Это демонстрация на конкретном цифровом изображении, а не тест всех телефонов и способов печати. Белый квадрат не воспроизводит полностью ни царапину, ни блик, ни размытие от движения. При реальной съёмке добавляются наклон, освещение и ограничения камеры. Успешная проверка говорит ровно о том, что данный код пережил данное изменение.
Именно поэтому коррекция ошибок не отменяет аккуратную вёрстку: свободное поле, отчётливые модули и проверка готовой наклейки остаются важны. Запас лучше оставлять для случайной грязи и износа, а не считать его разрешением закрывать рисунок декором.
Главный секрет QR-кода не в том, что камера видит сквозь пятно. Создатели заранее предусмотрели, что часть изображения может исчезнуть, и оставили достаточно связанных между собой сведений для восстановления. Мы видим потёртую картинку, а программа при удачном сочетании условий получает точный ответ.
Источники
- DENSO: история QR-кода и назначение его элементов
- DENSO WAVE: коррекция ошибок и кодовые слова
- DENSO WAVE: уровни коррекции и характеристики QR-кода
- DENSO WAVE: свободное поле вокруг символа
- DENSO: интервью Масахиро Хары о разработке QR-кода, 2024
- DENSO WAVE: история QR-кода и происхождение названия
- DENSO WAVE: версии, размеры сетки и вместимость
- Project Nayuki: пошаговое объяснение кодирования и устройства QR-кода автором библиотеки








