QRkoder

Восстановление ошибок QR (QR Error Recovery)

Механизм QR-кода, позволяющий декодировать символ при частичном повреждении: грязь, царапина, обрезка угла, логотип в центре. Реализован через коды Рида-Соломона — к данным добавляются ECC-блоки, восстанавливающие потери на уровне codeword (8 бит). Четыре уровня: L 7%, M 15%, Q 25%, H 30%.

Принцип восстановления

QR-код — не просто картинка с данными, а помехоустойчивый код. К полезной нагрузке генератор добавляет ECC-codewords (кодовые слова коррекции), рассчитанные алгоритмом Reed-Solomon. Когда сканер видит повреждённый или частично перекрытый символ, декодер вычисляет «синдромы» — разницу между ожидаемым и принятым полиномом над полем GF(256) — и восстанавливает утраченные codewords.

Важно: восстановление работает на уровне codeword (8-битных блоков), не отдельных битов. Если внутри одного байта испорчены 1 бит или 7 — алгоритму всё равно, он восстанавливает весь байт целиком. Это делает коррекцию особенно эффективной против «кластерных» повреждений: царапин, пятен грязи, капель воды.

Против крупных локальных повреждений стандарт использует blockwise interleaving: данные и ECC-байты перемежаются между блоками Рида-Соломона, а не идут единым потоком. В версии 5 кода при ECL-H, например, формируются 2 блока данных и 2 блока ECC по 22 байта каждый. При чередовании локальное пятно 10×10 модулей не уничтожает один блок полностью — потери распределяются по нескольким блокам, и каждый из них теряет меньше, чем мог бы исправить Рид-Соломон. Версии 1–40 различаются числом блоков: у версии 40 при ECL-H их 67 пар.

Уровни L/M/Q/H и сценарии

Стандарт ISO/IEC 18004 задаёт четыре уровня коррекции — каждый определяет, сколько процентов площади декодер гарантированно восстановит:

УровеньВосстановлениеТипичный кейсПрибавка к ёмкости vs H
L (Low)~7%QR на экране, в PDF, электронный билет — чистая цифровая среда без физических дефектов+130%
M (Medium)~15%Визитки, листовки, упаковка без логотипа — стандартная офсетная печать без сложных условий+70%
Q (Quartile)~25%Промышленные наклейки, упаковка с износом, небольшой логотип (≤15% площади)+30%
H (High)~30%Логотип в центре, наружная реклама, гравировка, агрессивная средабазовый

«Прибавка к ёмкости» означает: при переходе с H на L тот же URL 50 символов помещается в QR версии 2 (25×25), а не версии 5 (37×37). На экране смартфона это критично — меньший код лучше сканируется с дистанции.

Когда нужен максимум

Логотип в центре кода. Логотип физически перекрывает модули — декодер видит это как повреждение и применяет Рид-Соломон. Логотип в 20% площади + обычные дефекты печати 3–5% = суммарно ~25%. ECL-Q формально держит, но без страховки: любой дополнительный дефект — и код «сыплется». ECL-H при 30% оставляет запас 5–10% поверх логотипа. Поэтому для QR с логотипом ECL-H — единственный безопасный выбор.

Наружная реклама и баннеры. Уличный баннер за сезон получает выцветание от UV, налипшую пыль, капли краски, механические царапины. Совокупные потери через 6 месяцев — 10–20% площади. ECL-M (15%) уже на пределе, ECL-H — с запасом.

Грязные и агрессивные среды. Промо-чеки в ресторане попадают под жир, влагу и тепловой принтер с неравномерной плотностью. На кухонном оборудовании QR берут на себя потёки масла и пар. Склады с картонной тарой — пыль и конденсат. В таких условиях ECL-H не роскошь, а инженерный минимум.

Архивная маркировка и промышленные активы. Инвентарные таблички, маркировка кабелей, этикетки на инструменте: код живёт 5–10 лет. Перепечатать через год дороже, чем один раз заложить ECL-H.

Совет для динамических QR. Динамический QR кодирует короткий редирект (~25 символов), который помещается в версию 2–3 даже при ECL-H. Потери по ёмкости нет, зато стойкость максимальная — ставьте H по умолчанию. Подробнее об алгоритме коррекции — в статье уровень коррекции ошибок ECC и на странице конструктора QRkoder.

Частые вопросы

Чем восстановление QR отличается от коррекции ошибок в целом?

Коррекция ошибок (ECC) — общий термин для любого алгоритма, добавляющего избыточность к данным. Восстановление QR — конкретная практика применения этого механизма в реальных сценариях: логотип, грязь, царапина, выгорание. Математика одна — алгоритм Рида-Соломона над GF(256). Но результат зависит от выбора уровня (L/M/Q/H) и понимания сколько площади QR реально потеряет в конкретной среде. «Коррекция ошибок» — про алгоритм, «восстановление QR» — про практику инженерного выбора уровня под задачу.

Что такое blockwise interleaving и зачем он нужен?

Если записывать все данные в один RS-блок, локальная царапина может уничтожить больше байт, чем способен восстановить алгоритм. Interleaving решает это: данные и ECC-байты чередуются между несколькими RS-блоками. При пятне 10×10 модулей потери распределяются по нескольким блокам — каждый теряет немного, и каждый восстанавливается независимо. В QR версии 10 при ECL-H формируется 22 блока. Без interleaving серьёзное локальное повреждение могло бы уничтожить один блок полностью — с ним это практически невозможно.

Восстановление работает при обрезанном угле QR?

Да, именно для этого и разрабатывался механизм. Обрезанный угол — типичное «стирание» (erasure): декодер знает позиции потерянных байт, что математически вдвое эффективнее случайных ошибок. При ECL-H с 2t=30% избыточности декодер справляется с erasure до 30% площади. Срезанный угол 1/4 символа — это ~25%, что входит в лимит. Главное, чтобы три угловых маркера (finder patterns) оставались читаемыми — без них сканер не может найти и выровнять матрицу.

Можно ли «увеличить» восстановление сверх 30%?

Нет. 30% при ECL-H — предел, установленный стандартом ISO/IEC 18004. Математически Рид-Соломон мог бы работать с большей избыточностью, но тогда полезная ёмкость кода стала бы нулевой или отрицательной. Если нужна устойчивость выше 30% — используйте другую символику: Data Matrix с настраиваемой коррекцией до 30%, Aztec Code с коррекцией до 95% (но ценой размера), или уменьшайте данные в QR за счёт динамического редиректа, чтобы уместить их в версию с запасом по ёмкости.

Почему логотип 25% не всегда убивает QR на уровне Q?

ECL-Q восстанавливает ровно 25% — формально достаточно для логотипа той же площади. На практике логотип редко бывает ровно 25%: чаще 20–22%. Кроме того, логотип занимает центральную зону кода, где нет finder patterns и timing strips — только данные и ECC-модули. Декодер обрабатывает перекрытые модули как стирания с известными позициями, и RS справляется. Но малейший дополнительный дефект — плохой принтер, загрязнение, засветка — выбивает код за предел 25%. ECL-H даёт запас именно на этот «и ещё немного».

Влияет ли уровень восстановления на скорость сканирования?

Практически нет. Смартфон декодирует QR любого уровня за 20–50 мс. Декодирование Рида-Соломона при ECL-H занимает на 5–10 мс больше, чем при ECL-L — это меньше 10% от общего времени распознавания. Пользователь разницы не заметит. Зато в реальных условиях ECL-H даёт считывание с первой попытки там, где ECL-L или ECL-M потребуют нескольких — и это уже заметно. Задержка 5 мс против «не читается» — не сравнимые величины.

Создавайте QR-коды бесплатно

Динамические QR-коды с аналитикой, дизайном и без ограничений по сканированиям.

Начать бесплатно