🔍 КАК ЭТО УСТРОЕНО

Почему QR-код читается, даже если его порвать

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

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

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

Сначала — найти и выровнять

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

Дополнительные мелкие метки и сетка из чередующихся модулей помогают выровнять искажённую перспективу — например, когда код снят сбоку или наклеен на изгиб бутылки.

Главная защита: коды коррекции ошибок

Но живучесть к повреждениям даёт другое. В QR-код вшиты коды коррекции ошибок Рида-Соломона — та самая технология, что чинит данные на компакт-дисках и в дальней космической связи. Идея: к полезным данным добавляют избыточные «проверочные» модули, вычисленные из них. Если часть кода затёрта или прочитана неверно, по уцелевшим данным и проверочным символам исходное сообщение восстанавливается целиком.

Самое удобное — у QR-кода есть выбор уровня защиты. Их четыре, и они задают, какую долю кода можно потерять без вреда:

УровеньМожно повредитьЦена
L (низкий)около 7%больше данных влезает
M (средний)около 15%баланс
Q (высокий)около 25%меньше данных
H (максимальный)около 30%самый стойкий

Вот почему дизайнеры спокойно лепят логотип в центр QR-кода: при уровне H можно «выбить» почти треть, и код всё равно соберётся. Логотип просто занимает часть той брони, что заложена с запасом.

А как же обычный штрихкод?

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

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

Одна идея на все случаи

QR-код, компакт-диск, ECC-память сервера, сигнал зонда у края Солнечной системы — все они держатся на общем принципе: добавь избыточность заранее, и переживёшь повреждение потом. Разница лишь в масштабе беды, к которой готовятся. Кофейное пятно на коде и космическая частица, перевернувшая бит за миллиарды километров от Земли, лечатся одной и той же математикой. В этом и красота кодов коррекции: немного лишних данных сегодня — спасённое сообщение, что бы с ним ни случилось по дороге.

#QR-код#данные#коды коррекции#Рид-Соломон#штрихкод