Виды двумерных 2D штрих-кодов
azteccodeМногие годы штрихкоды использовались как машинно-читаемые идентификаторы предметов. Этикетка товара содержала уникальный серийный номер, закодированный в виде черных и белых полос, который служил ключом к базе данных, содержащей подробную информацию о товаре. Достучаться до базы данных и получить подробную информацию должен был сканер штрих-кода.  Но многие пользователи нуждались в кодировании большего объема информации. Им требовался штрихкод, выполняющий роль портативной базы данных, а не ключа к ней.

Идея создания портативной базы данных начала развиваться в 1984 году, когда Automotive Industry Action Group (AIAG) опубликовала стандарт для маркировки грузов и деталей, содержащий четыре "стековых" ("stacked"- т.е. "поставленные один на другой") штрихкода Code 39. Эти коды содержали номер (идентификатор) детали, количество, отправителя и серийный номер.
Первый действительно двухмерный код был представлен фирмой Intermec Corporation в 1988 году, когда был анонсирован Code 49. После этого код пересматривался и совершенствовался для уменьшения площади, необходимой для размещения закодированной информации.
Сегодня для описания этого нового класса символик используются несколько названий: Двунаправленный код (или двухмерный - Two-dimensional code) или 2-D code. Для быстрого считывания таких штрих-кодов изобрели новые двухмерные сканеры штрих-кодов.
Названия стековая символика (stacked symbology) или многорядный код (multi-row code) более точно отражают сущность серии линейных (однонаправленных) штрихкодов. Данные кодируются в виде нескольких строчек штрихов и пробелов переменной ширины.
Название матричный код (Matrix code) применяется для обозначения двухмерных кодов, основанных на расположении черных пятнышек (элементов) внутри матрицы. Каждый черный элемент имеет определеный размер и позиция элемента кодирует данные.
Обычный штрихкод имеет "вертикальную избыточность", означающую что одна и та же информация повторяется по вертикали. Это действительно одномерный штрихкод. Высота штрихов может быть уменьшена без потери информации. Однако, вертикальная избыточность позволяет штрихкоду, имеющему дефекты печати (например пятна или просветы) сохранять читаемость.
Двухмерный код содержит информацию как по горизонтали, так и по вертикали. Фактически, любой печатный текст представляет собой аналог двухмерного кода. Поскольку оба направления содержат информацию, теряется возможность использования вертикальной избыточности. Для предотвращения потери читаемости и обеспечения быстроты считывания должна использоваться другая технология. Борьба с ошибками обеспечивается достаточно просто - большиство двухмерных кодов используют специальные контрольные суммы, позволяющие гарантировать достоверность вводимой информации.
Первоначально двухмерные коды разрабатывались для приложений, не дающих места, достаточного для размещения обычного штрихкодового идентификатора. Первым применением для таких символов стали фасовки лекарственных препаратов в здравоохранении. Эти фасовки малы по размерам и имеют мало места для размещения штрихкода. Электронная промышленность также проявляет интерес к кодам высокой плотности и двухмерным кодам в связи с уменьшением размеров элементов и изделий.
Позднее возможность кодирования портативной базы данных сделала двухмерные символики привлекательными для приложений, в которых минимизация размера кода не является основным требованием. Например, хранение имени, адреса и демографической информации на карточках прямой коммерческой рассылки (direct mail business reply cards). Положительный отклик такой рассылки часто составляет менее двух процентов от общего объема распространенных карточек. Если возвращенная карточка содержит только идентификатор, служащий ключом к базе данных, то вероятно, что несколько карточек придется сверять с огромной базой данных, содержащей миллионы имен. Это потребует больших затрат на компьютерную обработку и хранение такой базы. Если вся важная информация будет напечатана одновременно с печатью предложения на карточке, существенного увеличения затрат не произойдет, а информация будет быстро введена с карточки в компьютер. Похожая экономия может быть достигнута при необходимости ввода данных в "полевых условиях". Работнику гораздо удобнее считать двухмерный штрихкод с помощью портативного устройства, чем дозваниваться до компьютера, расположенного в офисе.
Сегодня разработано более 20 различных символик двухмерных штрихкодов. Наиболее популярны коды PDF417, Datamatrix, Aztec. 
Стековая символика PDF417 была введена в 1991 году фирмой Symbol Technologies. PDF происходит от сокращения Portable Data File (Портативный Файл Данных), штрихкодовый символ состоит из 17 модулей, каждый из которых содержит 4 штриха и пробела (отсюда номер 417). Штрихкод открыт для общего пользования.
Структура кода поддерживает кодирование максимального числа от 1000 до 2000 символов в одном коде при информационной плотности от 100 до 340 символов. Каждый код содержит стартовую и стоповую группы штрихов, увеличивающие высоту штрихкода.
Код PDF417 считывается при помощи специального лазерного или CCD-сканера. Для печати кода следует использовать принтеры с хорошим разрешением (термо-трансферные или лазерные).
Micro PDF417
MicroPDF417 произошел от кода PDF417. Код имеет ограниченный набор размеров символов и фиксированный уровень коррекции ошибок для кажого размера символа. Размеры модуля определяются пользователем, поэтому код может печататься на различных принтерах. Символика допускает хранение до 150 байт, 250 алфавитно-цифровых символов или 366 цифр. Это осуществляется выбором одной из трех модификаций кода: байтовый, текстовый или цифровой. Режим текстовый поддерживает печатные ASCII-символы с кодами от 32 до 126 включительно, а также некоторые контрольные символы. Байтовый код кодирование всех 256 возможных 8-битовых величин. Это набор включает все ASCII-символы от 0 до 127 включительно, а также национальные символы.
MicroPDF417 разработан для приложений, требующих меньшего размера символов, чем допускает код PDF417.
Aztec Code
Aztec Code введен Энди Лонгэйсром (Andy Longacre) в 1995 году и открыт для общего использования. Aztec Code разработан для легкой печати и легкой расшифровки. Штрихкод представляет собой квадратную матрицу с концентрическими квадратами в центре, которые служат для определения позиции кода относительно сканера и мерной линейкой по краю кода. Наименьший штрихкод Aztec имеет площадь 15x15 модулей, наибольший - 151x151. Минимальный код Aztec кодирует 13 цифр или 12 букв, а максимальный - 3832 цифры или 3067 букв или 1914 байт данных. Символика не требует свободной зоны вокруг штрихкода. Существуют 32 градации размера кода с возможностью пользовательской установки защиты от ошибок по методу Рида-Соломона (Reed-Solomon) от 5% до 95% от области кода. Рекомендуемый уровень - 23% емкости кода плюс 3 кодовых слова.
Кодируются все 8-битовые значения. Величины 0 - 127 представляются в виде набора символов ASCII, значения 128-255 представляются как ISO 8859-1, Latin Alphabet No.1. Кроме данных можно закодировать два служебных символа: FNC1 для совместимости с некоторыми существующими приложениями и ECI (escape-последовательность) для стандартизованной кодировки сообщений.
Small Aztec Code
Small Aztec Code представляет собой специальную портативную версию Aztec Code для кодирования коротких сообщеий (до 95 символов). Занимаемая кодом площадь экономится засчет удаления одного набора колец (квадратов) в зоне ориентировки кода, сокращения мерной линейки и ограниченя длины сообщения, однако метод кодирования тот же, что и в стандартном Aztec Code. Small Aztec полностью совместимы с декодером стандартного Aztec Code, поэтому оба типа кода могут одновременно использоваться в одном приложении.
Четыре размера возможны для Small Aztec. Как и в стандартном Aztec, коды первого и второго уровня используют 6-битовые кодовые слова для коррекции ошибок, тогда как коды третьего и четвертого уровней используют 8-битовые кодовые слова. Хотя код четвертого уровня поддерживает 76 кодовых слов, не более 64 из них могут быть использованы для данных, так что емкость кода Small Aztec ограничена кодированием 512 битов данных (обычно около 95 символов или 120 цифр).
Data Matrix
Код Data Matrix от фирмы CiMatrix представляет собой двухмерный код, разработанный для размещения большого объема информации на ограниченной площади поверхности. Штрихкод Data Matrix может хранить от одного до 500 символов. Код может масштабироваться от 1-mil плотности до 14-дюймовой площади. Это означает, что код Data Matrix имеет теоретическую максимальную плотность 500 миллионов символов на дюйм! На практике плотность, конечно, ограничивается разрешающей способностью печатающих устройств и сканеров.
Код имеет несколько других интересных особенностей. Поскольку информация кодируется абсолютной позицией элемента внутри кода, т.е. позицией относительно границ кода, код не так чувствителен к дефектам печати, как традиционный штрихкод. Схема кодирования имеет высокий уровень избыточности, данные рассосредоточены внутри штрихкодового символа. Это позволяет сохранять читаемость кода при его частичном повреждении или потере части кода. Каждый код имеет измерительные линейки, которые выглядят как сплошная линия по одному краю символа и равномерно расположенные квадратные точки одинакового размера по другому краю. Эти линейки используются для определения ориентации и плотности кода.
Существуют два основных набора символов. Они используют свернутое кодирование для коррекции ошибок, которое использовалось в первых версиях кода Datamatrix, эти версии описаны как ECC-000.. ECC-140. Второй набор описан как ECC-200 и использует метод Рида-Соломона (Reed-Solomon) коррекции ошибок. Символы ECC-000.. 140 всегда имеют нечетное количество модулей по каждой стороне квадрата. Символы ECC-200 всегда содержат четное число элементов по каждой из сторон. Максимальная емкость символа ECC-200 составляет 3116 цифр или 2335 букв в символе, состоящем из 144 модулей.
Наиболее популярными применениями для Datamatrix является маркировка небольших предметов, таких как электронные элементы и печатные платы электронных приборов. Эти приложения используют способность Datamatrix разместить примерно 50 символов в коде размером 3 мм и тот факт, что код может быть прочитан при 20-процентной контрастности печати.