Объяснение
QR-код может считываться после обрезки, потому что в нём заранее записана избыточная информация для восстановления повреждённых данных.
Эта защита называется коррекцией ошибок и работает по принципу кодов Рида—Соломона.
При создании QR-кода к полезным данным добавляются специальные проверочные кодовые слова.
Сканер использует их, чтобы обнаружить пропуски или неверно распознанные участки и восстановить исходное сообщение.
Обрезанный край для программы выглядит примерно как область с неизвестными или испорченными модулями, то есть маленькими чёрными и белыми квадратиками.
Если таких модулей потеряно не слишком много, оставшихся данных и проверочных слов хватает для восстановления.
Кроме того, три больших угловых квадрата помогают сканеру понять размер, поворот и перспективу кода.
Поэтому удаление части изображения не всегда мешает найти сам QR-код.
Но коррекция ошибок не создаёт бесконечно много отсутствующих данных и не заменяет полностью служебные элементы.
Если обрезка уничтожила слишком большую область, особенно несколько угловых ориентиров, сканер может не определить границы или структуру кода.
Даже правильный QR-код может плохо читаться, если рядом нет свободного белого поля, называемого тихой зоной.
Итак, считывание возможно не потому, что QR-код хранит точную копию каждой клеточки, а потому, что он хранит данные вместе с запасом для восстановления.
Чем выше выбранный уровень коррекции и чем меньше повреждение, тем вероятнее успешное считывание, но тем меньше полезного текста помещается в код.
Уровни коррекции ошибок
- L — низкий: восстанавливает примерно до 7% повреждённых кодовых слов. Даёт больше места для текста, но хуже переносит обрезку.
- M — средний: восстанавливает примерно до 15% кодовых слов. Это распространённый компромисс между вместимостью и надёжностью.
- Q — повышенный: восстанавливает примерно до 25% кодовых слов. Подходит, если код может быть заметно испорчен.
- H — высокий: восстанавливает примерно до 30% кодовых слов. Такой QR-код лучше переносит повреждения, но содержит меньше полезных данных.
