QRkoder

ECC (Error Correction Code)

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

Определение ECC

ECC (Error Correction Code) — это общее обозначение алгоритмов, которые позволяют обнаруживать и исправлять ошибки в передаваемых или считываемых данных. Такие алгоритмы добавляют к полезной нагрузке специальные избыточные байты (код коррекции). Если часть данных утрачена или искажена — например, из-за грязи на этикетке, дефектов печати, шума в радиоканале или сбоя памяти, — декодер использует избыточность, чтобы восстановить исходное сообщение.

В мире двумерных штрих-кодов и QR-кодов базовым алгоритмом ECC служит код Рида-Соломона (Reed-Solomon), описанный стандартом ISO/IEC 18004. Именно он обеспечивает знаменитую устойчивость QR-кодов к повреждениям: даже при повреждении до 30% модулей символ остаётся читаемым.

Уровни ECC в QR-коде

Стандарт ISO/IEC 18004 определяет четыре уровня коррекции ошибок:

  • L (Low) — восстанавливает до 7% повреждений, максимальная ёмкость данных;
  • M (Medium) — до 15%, базовый уровень для большинства сценариев;
  • Q (Quartile) — до 25%, применяется при печати на текстиле и упаковке;
  • H (High) — до 30%, выбирается для кодов с логотипом или сложной графикой.

Чем выше уровень ECC, тем больше избыточных модулей попадает в символ и тем меньше полезных данных в него помещается. Поэтому уровень выбирается как компромисс между ёмкостью, размером кода на носителе и ожидаемыми условиями эксплуатации.

Где применяется ECC помимо QR

  1. CD- и DVD-диски (Reed-Solomon, CIRC).
  2. Связь с глубоким космосом и спутниками (Turbo- и LDPC-коды).
  3. Жёсткие диски и SSD (коды BCH, LDPC).
  4. Штрих-коды Data Matrix, PDF417, Aztec.
  5. Сотовые сети 4G/5G (полярные коды, LDPC).
  6. Оперативная память серверов (ECC DRAM).
Без ECC современные технологии рухнули бы: от QR-кода на квитанции до связи с марсоходом. Любой «реальный» канал — шумный, а ECC делает данные устойчивыми к этому шуму.

Связанные концепции

  • Коды Рида-Соломона как базовый алгоритм в QR;
  • Маскирование (masking) — следующий шаг после ECC в ISO/IEC 18004;
  • Уровни L/M/Q/H и их выбор под задачи;
  • Data Matrix и PDF417 — альтернативные символики с собственными ECC-схемами.

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

Какой уровень ECC выбрать для QR-кода?

Для обычного печатного носителя (бумага, визитка, листовка) достаточно уровня M. Если QR-код наносится на упаковку, которая может помяться или испачкаться, выбирайте Q. Для маркетинговых QR-кодов с логотипом посередине — только H: центральная часть символа будет «закрыта» изображением, и без максимального уровня коррекции сканер не сможет его прочитать. L используется редко — в основном там, где нужна максимальная ёмкость данных.

Можно ли добавить логотип в QR-код за счёт ECC?

Да, именно на этом строится популярный приём. Коды с уровнем коррекции H выдерживают до 30% повреждений, и центральные модули можно «перекрыть» логотипом размером примерно 20–25% от площади символа. Сканер при этом успешно декодирует QR. Важно следить за контрастом и не превышать допустимую зону закрытия — иначе часть телефонов и промышленных сканеров начнут ошибаться, а «магия» рекламного дизайна обернётся потерянным трафиком.

Что такое код Рида-Соломона?

Код Рида-Соломона — это математический алгоритм коррекции ошибок, предложенный в 1960 году. Он рассматривает данные как коэффициенты многочлена над конечным полем и добавляет избыточные элементы, по которым декодер может восстановить исходные значения даже при массовых пакетных ошибках. В QR-коде Рид-Соломон обрабатывает блоки из 255 байт: часть из них — данные, часть — код коррекции. Такой подход особенно эффективен против «кластерных» повреждений, вроде царапины или грязи.

Снижает ли ECC скорость сканирования?

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

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

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

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