Как QR-код переживает утрату части данных

QR-код — не просто узор из чёрных и белых клеток. В нём вместе с полезной информацией записаны дополнительные контрольные данные. Они работают как запасные фрагменты: если часть содержимого испорчена или неразличима, сканер может вычислить, чего не хватает.

Для этого QR-коды используют код Рида—Соломона — математический способ обнаруживать ошибки и восстанавливать исходные данные по оставшимся фрагментам. Информация разбита на небольшие блоки, а к каждому добавлены избыточные символы. Пока повреждений не слишком много, этой избыточности хватает, чтобы восстановить сообщение.

Почему важны не только проценты

У QR-кодов предусмотрены разные уровни коррекции: чем больше контрольных данных заложено при создании кода, тем больше повреждений он способен выдержать, но тем меньше места остаётся для самого сообщения. Максимальный уровень рассчитан примерно на восстановление до 30% кодовых данных — отсюда и часто приводимая цифра.

Однако это не универсальная гарантия, что можно закрасить ровно 30% площади любого кода. Площадь повреждения и объём утраченной информации — не одно и то же: значение имеют расположение и характер повреждений. Кроме того, сканеру нужно распознать саму структуру кода — например, крупные угловые метки, по которым он определяет ориентацию и границы рисунка. Если они испорчены слишком сильно, восстановление данных может не помочь.

Зачем в коде место для ошибки

Запас особенно полезен в повседневной жизни: код может быть слегка затёрт, загрязнён или частично закрыт наклейкой. Сканер не угадывает пропавшие клетки по изображению — он использует заранее записанную избыточность и математически восстанавливает данные. Поэтому QR-код способен оставаться читаемым даже тогда, когда на первый взгляд его рисунок уже заметно нарушен.