Двумерный код (2D-код)
Двумерный код (2D-код) — штрих-код, хранящий данные по двум осям сразу, в отличие от линейного 1D-кода: включает матричные (QR, Data Matrix, Aztec) и стековые (PDF417) форматы.
Определение двумерного кода
Двумерный код (2D-код) — это машиночитаемый штрих-код, кодирующий информацию сразу по двум осям — горизонтали и вертикали. Классический линейный (1D) штрих-код хранит данные только в ширине полос и читается по одной оси, поэтому вмещает 10–20 символов. Двумерный код использует всю плоскость и вмещает тысячи знаков: QR-код — до 7089 цифр, PDF417 — до 2710, Data Matrix — до 3116.
Термин «двумерный» описывает способ хранения, а не конкретный формат. Это зонтичное понятие для целого семейства символик, каждая из которых стандартизирована отдельным ISO. Общая черта — размещение чёрно-белых модулей (или ячеек) в двумерной сетке и обязательная избыточность данных для восстановления повреждённого кода.
Виды двумерных кодов
Двумерные коды делятся на два больших класса по внутренней структуре.
- Матричные — данные записаны в регулярной сетке из модулей. Сюда относятся QR-код (Denso Wave, 1994, ISO/IEC 18004), Data Matrix (ISO/IEC 16022), Aztec Code (Welch Allyn, 1995, ISO/IEC 24778) и MaxiCode (UPS, 1992, ISO/IEC 16023) с гексагональной решёткой.
- Стековые (stacked) — несколько строк линейного кода наложены друг на друга. Главный представитель — PDF417 (Symbol Technologies, 1991, ISO/IEC 15438), применяемый в водительских удостоверениях и билетах.
Как работает двумерный код
Любой 2D-код состоит из служебной части и области данных. Служебные элементы — поисковые метки (у QR это три угловых квадрата, у Data Matrix — L-образная рамка, у Aztec — центральная мишень) — задают ориентацию и размер, чтобы камера нашла код под любым углом. Область данных содержит закодированные байты и байты коррекции ошибок.
Практически все двумерные коды используют алгоритм коррекции ошибок Reed-Solomon: он добавляет избыточные данные, позволяющие прочитать код, даже если часть повреждена или закрыта. Для QR-кода уровень коррекции доходит до 30%, для Data Matrix — тоже около 30%. Именно поэтому 2D-код читается с помятой, испачканной или частично залитой поверхности. Сгенерировать любой из форматов можно в генераторе штрих-кодов.
Связанные концепции
- Штрих-код (1D) — линейный предшественник, хранит данные по одной оси.
- QR-код — самый массовый матричный 2D-код.
- Reed-Solomon — алгоритм коррекции ошибок, общий для всех 2D-кодов.
- Data Matrix — компактный матричный код маркировки «Честный знак».
Частые вопросы
Чем двумерный код отличается от обычного штрих-кода?
Обычный (линейный, 1D) штрих-код хранит данные только в ширине вертикальных полос и читается по одной оси, вмещая 10–20 символов. Двумерный код кодирует информацию по двум осям — по горизонтали и вертикали — и вмещает тысячи знаков. Например, QR-код держит до 7089 цифр против ~20 у кода EAN-13. 2D-код также восстанавливается при повреждении благодаря коррекции ошибок.
Какие бывают виды двумерных кодов?
Двумерные коды делятся на матричные и стековые. Матричные хранят данные в сетке модулей — это QR-код, Data Matrix, Aztec Code и MaxiCode с гексагональной решёткой. Стековые (stacked) наложены из строк линейного кода — главный пример PDF417, который используется в водительских удостоверениях, паспортах и билетах. Каждый формат описан своим стандартом ISO.
Сколько данных вмещает 2D-код?
Ёмкость зависит от формата. QR-код версии 40 вмещает до 7089 цифр, 4296 буквенно-цифровых символов или 2953 байта. Data Matrix — до 3116 цифр, PDF417 — до 2710, Aztec — около 3832 цифр, MaxiCode — 138 цифр. Реальная ёмкость ниже максимума, потому что часть площади резервируется под байты коррекции ошибок Reed-Solomon.
Как двумерный код читается при повреждении?
Все распространённые 2D-коды используют коррекцию ошибок Reed-Solomon. Она добавляет избыточные данные, по которым декодер восстанавливает утраченные модули. У QR-кода уровень коррекции H восстанавливает до 30% площади, поэтому код читается даже с логотипом в центре, царапинами или пятнами. Точность восстановления настраивается при генерации в зависимости от условий эксплуатации.
Где применяют двумерные коды?
QR-код — в платежах, рекламе, меню, электронных билетах. Data Matrix — в маркировке «Честный знак» и на лекарствах, электронике. Aztec Code — в железнодорожных и авиабилетах (стандарт IATA). PDF417 — в водительских удостоверениях США, паспортах и логистике. MaxiCode — в конвейерной сортировке посылок UPS и FedEx. Выбор формата определяется размером поверхности, требуемой ёмкостью и типом сканера.