Введение
Тип матричного штрих-кода
Ацтекский код — это матричный код, изобретенный Эндрю Лонгакре-младшим и Робертом Хасси в 1995 году. Код был опубликован компанией AIM, Inc. в 1997 году. Хотя ацтекский код был запатентован, патент был официально переведен в общественное достояние. Ацтекский код также опубликован как стандарт ISO/IEC 24778:2008. Названный в честь сходства центрального ориентировочного рисунка с пирамидой ацтеков, ацтекский код потенциально может занимать меньше места, чем другие матричные штрих-коды, поскольку ему не требуется окружающая пустая "тихая зона".
Структура
Символ построен на квадратной сетке с рисунком мишени в центре для определения кода. Данные кодируются в концентрических квадратных кольцах вокруг рисунка мишени. Центральная мишень имеет размер 9×9 или 13×13 пикселей, а один ряд пикселей вокруг неё кодирует основные параметры кодирования, создавая "ядро" размером 11×11 или 15×15 квадратов. Данные добавляются в "слои", каждый из которых содержит два кольца пикселей, что дает общие размеры 15×15, 19×19, 23×23 и т.д. В углах ядра расположены ориентиры, позволяющие считывать код при вращении или отражении. Декодирование начинается в углу с тремя черными пикселями и продолжается по часовой стрелке до углов с двумя, одним и нулем черных пикселей. Переменные пиксели в центральном ядре кодируют размер, поэтому нет необходимости обозначать границу кода пустой "тихой зоной", хотя некоторые сканеры штрих-кодов могут требовать её. Компактное ядро кода Aztec может быть окружено от 1 до 4 слоев, создавая символы размером от 15×15 (для 13 цифр или 12 букв) до 27×27. Кроме того, существует специальная "руна" размером 11×11, которая кодирует один байт информации. Полное ядро поддерживает до 32 слоев, 151×151 пикселей, что позволяет кодировать 3832 цифры, 3067 букв или 1914 байтов данных. Любая часть символа, не используемая для основных данных, используется для коррекции ошибок Рида — Соломона, и разделение полностью настраиваемо, в пределах от 1 слова данных до 3 контрольных слов. Рекомендуемое количество контрольных слов составляет 23% от емкости символа плюс 3 кодовых слова. Код Aztec предназначен для создания читаемых кодов с использованием различных технологий печати. Он также хорошо подходит для дисплеев мобильных телефонов и других мобильных устройств.
Наполнитель
Биты данных разбиваются на кодовые слова, при этом первый бит соответствует наиболее значимому коэффициенту. Для предотвращения появления кодовых слов, состоящих только из нулей или только из единиц, применяется битовая начинка: если первые b-1 битов кодового слова имеют одинаковое значение, в поток данных вставляется дополнительный бит с противоположным значением. Эта вставка производится вне зависимости от значения последнего бита кодового слова. Важно отметить, что это правило применяется только к последовательностям из b-1 битов в начале кодового слова. Более длинные последовательности одинаковых битов допускаются, если они охватывают границу между кодовыми словами. При декодировании кодовое слово, состоящее только из нулей или только из единиц, может рассматриваться как стирание и исправляться более эффективно, чем обычная ошибка. Этот процесс увеличивает длину сообщения, и окончательное количество кодовых слов данных, записанных в режиме сообщения, становится известно только после его завершения. В редких случаях может потребоваться перейти к следующему большему символу и повторить процесс, чтобы обеспечить минимальную долю контрольных слов.
Наполнители
После битовой начинки, строка данных дополняется до следующей границы кодового слова добавлением одного бита. Если это привело бы к кодовому слову, состоящему только из единиц, последний бит изменяется на ноль (и игнорируется декодером как бит начинки). При декодировании биты дополнения могут быть интерпретированы как коды сдвига и фиксации, но это не повлияет на содержание сообщения. Получатель должен принимать и игнорировать неполный код в конце сообщения, если он состоит только из единиц. Кроме того, если общее количество битов данных в символе не кратно размеру кодового слова, к строке данных добавляется необходимое количество нулевых битов для заполнения оставшегося пространства. Эти биты не участвуют в вычислении контрольной суммы.
Проверка кодовых слов
Как слово режима, так и данные должны иметь контрольные слова, добавленные для заполнения доступного пространства. Это достигается путем добавления K контрольных слов таким образом, чтобы вся передаваемая информация делилась нацело на многочлен Рида — Соломона (x − 2)(x − 4)(x − 2K). Следует отметить, что контрольные слова не подвергаются битовой начинке и могут состоять только из нулей или только из единиц. Таким образом, невозможно обнаружить потерю контрольного слова.
Выкладываю сообщение
В дополнение к ядру, полный ацтекский код символа имеет "справочную сетку" чередующихся черных и белых пикселей, занимающих каждый 16-й ряд и столбец. Эти известные пиксели позволяют считывающему устройству поддерживать выравнивание с пиксельной сеткой для больших символов. До 4 слоев (31×31 пикселей) сетка состоит только из отдельных линий, исходящих из ядра и продолжающих чередующийся рисунок. Однако внутри 5-го слоя добавляются дополнительные ряды и столбцы чередующихся пикселей на расстоянии ±16 пикселей от центра, поэтому 5-й слой располагается на расстоянии ±17 и ±18 пикселей от центра, а символ 5-го слоя имеет размер 37×37 пикселей. Аналогично, дополнительные ряды и столбцы справочной сетки вставляются на расстоянии ±32 пикселя от центра, формируя 12-слойный символ размером 67×67 пикселей. В этом случае 12-й слой занимает кольца на расстоянии ±31 и ±33 пикселей от центра. Эта закономерность продолжается неограниченно наружу, с 15-пиксельными блоками данных, разделенными рядами и столбцами справочной сетки. Один из способов создания символа – полностью удалить справочную сетку и начать с ядра размером 14×14 пикселей, центрированного на белом квадрате 2×2 пикселей. Затем разделить его на блоки 15×15 пикселей и вставить справочную сетку между ними. Сообщение о режиме начинается в верхнем левом углу ядра и обходит его по часовой стрелке слоем толщиной в 1 бит. Оно начинается со старшего бита числа слоев и заканчивается контрольными словами. Для компактного ацтекского кода оно разбивается на четыре 7-битных фрагмента, чтобы освободить место для меток ориентации. Для полного ацтекского кода оно разбивается на четыре 10-битных фрагмента, каждый из которых делится пополам справочной сеткой. В некоторых случаях общая емкость матрицы не делится нацело на полные кодовые слова. В таких случаях основное сообщение дополняется нулями в начале. Эти биты не учитываются при вычислении контрольного слова и должны быть пропущены при декодировании. Общая емкость матрицы для полного символа может быть рассчитана как (112+16*L)*L для полного ацтекского кода и (88+16*L)*L для компактного ацтекского кода, где L – размер символа в слоях. Например, общая емкость матрицы компактного ацтекского кода с 1 слоем составляет 104 бита. Поскольку кодовые слова состоят из шести бит, это дает 17 кодовых слов и два дополнительных бита. Два нулевых бита добавляются к сообщению в качестве дополнения и должны быть пропущены при декодировании. Дополненное основное сообщение начинается в верхнем левом углу всего символа и спирально обходит его против часовой стрелки слоем толщиной в 2 бита, заканчиваясь непосредственно над верхним левым углом ядра. Это помещает битовые слова, для которых можно обнаружить стирание, во внешние слои символа, наиболее подверженные стиранию. Контрольные слова хранятся ближе к ядру. Последнее контрольное слово заканчивается непосредственно над верхним левым углом "глазного яблока". При стандартной ориентации ядра первый бит первого слова данных помещается в верхний левый угол, а дополнительные биты располагаются в столбце шириной 2 бита слева направо и сверху вниз. Это продолжается до 2 строк от нижней части символа, после чего рисунок поворачивается на 90 градусов против часовой стрелки и продолжается в ряду высотой 2 бита, снизу вверх и слева направо. После 4 равных по размеру четвертных слоев спираль продолжается с верхнего левого угла следующего внутреннего слоя, в конечном итоге заканчиваясь на один пиксель выше верхнего левого угла ядра. Наконец, 1 бит кодируются черными квадратами, а 0 бит – белыми квадратами.
Транспорт
Ацтекские коды широко используются для транспортных билетов. Ацтекский код был выбран авиационной отраслью (стандарт IATA BCBP) для электронных посадочных талонов. Несколько авиакомпаний отправляют ацтекские коды на мобильные телефоны пассажиров в качестве посадочных талонов. Они часто интегрированы с приложениями на телефонах пассажиров, включая Apple Wallet. Ацтекские коды также используются в железнодорожном транспорте, в том числе в Тегеранском метро, British National Rail, Eurostar, Deutsche Bahn, TCDD Taşımacılık, DSB, SJ, České dráhy, Словацкими железными дорогами, Словенскими железными дорогами, Хорватскими железными дорогами, Trenitalia, Nederlandse Spoorwegen, Pasažieru vilciens, PKP Intercity, VR Group, Via Rail, Швейцарскими федеральными железными дорогами, SNCB и SNCF для билетов, продаваемых онлайн и распечатываемых клиентами или отображаемых на экранах мобильных телефонов. Ацтекский код сканируется сотрудниками поезда или на турникетах с помощью портативного сканера для проверки действительности билета.
Правительственная
В регистрационных документах на автомобили в Польше содержится краткое резюме, сжатое алгоритмом NRV2E и закодированное в виде кода ацтеков. Ведутся работы по внедрению возможности для страховых компаний автоматически заполнять необходимые данные на основе цифровых фотографий документа как первый этап заключения нового страхового договора. Федеральная налоговая служба России кодирует информацию об оплате в налоговых уведомлениях с использованием кода ацтеков.
Коммерческий
Многие поставщики услуг в Канаде теперь также используют эту технологию, включая EastLink, Shaw Cable и Bell Aliant.