Aztec Code — это матричный код, изобретенный Эндрю Лонгакром-младшим и Робертом Хасси в 1995 году. [1] Код был опубликован AIM, Inc. в 1997 году. Хотя Aztec Code был запатентован , этот патент был официально передан в общественное достояние . [2] Aztec Code также опубликован как стандарт ISO/IEC 24778:2008. Названный в честь сходства центрального шаблона искателя с ацтекской пирамидой , Aztec Code имеет потенциал для использования меньшего пространства, чем другие матричные штрихкоды, поскольку он не требует окружающей пустой «тихой зоны».
Символ построен на квадратной сетке с рисунком «бычий глаз» в центре для размещения кода. Данные кодируются в концентрических квадратных кольцах вокруг рисунка «бычий глаз». Центральный «бычий глаз» имеет размер 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 кодовых слова. [3]
Aztec Code должен производить читаемые коды с помощью различных технологий печати. Он также хорошо подходит для дисплеев сотовых телефонов и других мобильных устройств.
Процесс кодирования состоит из следующих этапов:
Все преобразования между строками битов и другими формами выполняются в соответствии с правилом « старший бит первым».
Могут быть закодированы все 8-битные значения, а также два управляющих кода:
По умолчанию коды 0–127 интерпретируются в соответствии с ANSI X3.4 ( ASCII ), а коды 128–255 интерпретируются в соответствии с ISO/IEC 8859-1 : латинский алфавит № 1. Это соответствует ECI 000003.
Байты преобразуются в 4- и 5-битные коды, основанные на текущем режиме декодирования, с кодами сдвига и защелки для изменения режимов. Значения байтов, недоступные таким образом, могут быть закодированы с использованием общего кода «двоичного сдвига», за которым следует длина и количество 8-битных кодов.
Для смены режимов сдвиг влияет только на интерпретацию одного следующего кода, тогда как защелка влияет на все последующие коды. Большинство режимов используют 5-битные коды, но режим Digit использует 4-битные коды.
За B/S (двоичным сдвигом) следует 5-битная длина. Если не ноль, это означает, что следуют 1–31 8-битных байта. Если ноль, 11 дополнительных бит длины кодируют количество следующих байтов за вычетом 31. (Обратите внимание, что для 32–62 байт две 5-битные последовательности сдвига байтов более компактны, чем одна 11-битная.) В конце двоичной последовательности возобновляется предыдущий режим.
За FLG( n ) следует 3-битное значение n . n = 0 кодирует FNC1. За n = 1–6 следуют 1–6 цифр (в цифровом режиме), которые дополняются нулями для создания 6-битного идентификатора ECI. n = 7 зарезервировано и в настоящее время недопустимо.
Сообщение режима кодирует количество слоев ( L слоев, закодированных как целое число L −1), и количество кодовых слов данных ( D кодовых слов, закодированных как целое число D −1) в сообщении. Все оставшиеся кодовые слова используются как проверочные кодовые слова.
Для компактных кодов Aztec количество слоев кодируется как 2-битное значение, а количество кодовых слов данных как 6-битное значение, что дает 8-битное слово режима. Для полных кодов Aztec количество слоев кодируется в 5 битах, а количество кодовых слов данных кодируется в 11 битах, что дает 16-битное слово режима.
Режимное слово разбивается на 2 или 4 4-битных кодовых слова в GF(16) и добавляются 5 или 6 контрольных слов Рида-Соломона, создавая 28- или 40-битное сообщение режима, которое оборачивается 1-пиксельным слоем вокруг ядра.
Поскольку компактный код Aztec со слоями L+1 может хранить больше данных, чем полный код со слоями L, полные коды с менее чем 4 слоями используются редко.
Самое главное, что количество слоев определяет размер используемых кодовых слов Рида-Соломона. Он варьируется от 6 до 12 бит:
Размер кодового слова b — это наименьшее четное число, гарантирующее, что общее количество кодовых слов в символе меньше предела 2 b −1, который может быть скорректирован с помощью кода Рида–Соломона.
Как упоминалось выше, рекомендуется зарезервировать не менее 23% доступных кодовых слов плюс 3 для исправления, а размер символа выбирать таким образом, чтобы сообщение помещалось в доступное пространство.
Биты данных разбиваются на кодовые слова, причем первый бит соответствует самому значимому коэффициенту. При этом кодовые слова, состоящие из одних нулей и одних единиц, избегаются с помощью бит-стаффинга : если первые b −1 бит кодового слова имеют одинаковое значение, в поток данных вставляется дополнительный бит с дополнительным значением. Эта вставка происходит независимо от того, имел бы последний бит кодового слова такое же значение или нет.
Также обратите внимание, что это применимо только к строкам из b −1 бит в начале кодового слова . Более длинные строки одинаковых бит разрешены, если они выходят за границу кодового слова.
При декодировании кодовое слово, состоящее из одних нулей или одних единиц, можно считать стиранием и исправить его более эффективно, чем общую ошибку.
Этот процесс делает сообщение длиннее, и окончательное число кодовых слов данных, записанных в сообщении режима, неизвестно, пока оно не будет завершено. В редких случаях может потребоваться перейти к следующему по величине символу и начать процесс заново, чтобы сохранить минимальную долю контрольных слов.
После бит-стаффинга строка данных дополняется до следующей границы кодового слова путем добавления 1 бита. Если это приведет к кодовому слову из всех единиц, последний бит изменится на ноль (и будет проигнорирован декодером как бит-стаффинга). При декодировании биты-заполнители могут быть декодированы как коды сдвига и защелки, но это не повлияет на содержимое сообщения. Читатель должен принять и проигнорировать частичный код в конце сообщения, если он состоит из всех единиц.
Кроме того, если общее количество бит данных, доступных в символе, не кратно размеру кодового слова, строка данных предваряется соответствующим количеством нулевых битов для заполнения дополнительного пространства. Эти биты не включаются в вычисление контрольного слова.
Как слово режима, так и данные должны иметь добавленные контрольные слова для заполнения доступного пространства. Это вычисляется путем добавления K контрольных слов таким образом, чтобы все сообщение было кратно полиному Рида–Соломона ( x −2)( x −4)...( x −2 K ).
Обратите внимание, что контрольные слова не подлежат битовой подстановке и могут быть полностью нулевыми или полностью единичными. Таким образом, невозможно обнаружить стирание контрольного слова.
Полный символ кода Aztec имеет, в дополнение к ядру, «опорную сетку» чередующихся черных и белых пикселей, занимающих каждую 16-ю строку и столбец. Компактный код Aztec не содержит этой сетки. Эти известные пиксели позволяют читателю поддерживать выравнивание с пиксельной сеткой над большими символами. Для до 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 бит. Оно начинается с самого старшего бита из числа слоев и заканчивается контрольными словами. Для компактного кода Aztec оно разбивается на четыре 7-битных части, чтобы оставить место для меток ориентации. Для полного кода Aztec оно разбивается на четыре 10-битных части, и каждая из этих частей делится пополам опорной сеткой.
В некоторых случаях общая емкость матрицы не делится поровну на полные кодовые слова. В таких случаях основное сообщение дополняется нулевыми битами в начале. Эти биты не включаются в расчет контрольного слова и должны быть пропущены при декодировании. Общая емкость матрицы для полного символа может быть рассчитана как (112+16*L)*L для полного кода Aztec и (88+16*L)*L для компактного кода Aztec, где L — размер символа в слоях. [4] Например, общая емкость матрицы компактного кода Aztec с 1 слоем составляет 104 бита. Поскольку кодовые слова состоят из шести бит, это дает 17 кодовых слов и два дополнительных бита. Два нулевых бита добавляются к сообщению в качестве дополнения и должны быть пропущены при декодировании.
Основное сообщение с заполнением начинается с внешнего верхнего левого угла всего символа и спирально обвивается вокруг него против часовой стрелки в слое толщиной 2 бита, заканчиваясь прямо над верхним левым углом ядра. Это помещает битовые слова данных, для которых могут быть обнаружены стирания, в самые внешние слои символа, которые наиболее подвержены стираниям. Контрольные слова хранятся ближе к ядру. Последнее контрольное слово заканчивается чуть выше верхнего левого угла яблочка.
При стандартной ориентации ядра первый бит первого слова данных размещается в верхнем левом углу, а дополнительные биты размещаются в 2-битном столбце слева направо и сверху вниз. Это продолжается до 2 строк снизу символа, когда шаблон поворачивается на 90 градусов против часовой стрелки и продолжается в 2-битном высоком ряду, снизу вверх и слева направо. После 4 равных по размеру четвертных слоев спираль продолжается с верхнего левого угла следующего внутреннего слоя, наконец, заканчиваясь на один пиксель выше верхнего левого угла ядра.
Наконец, 1 бит печатается как черные квадраты, а 0 бит печатается как белые квадраты.
Ацтекские коды широко используются для продажи транспортных билетов.
Aztec Code был выбран авиакомпанией ( стандарт BCBP ИАТА ) для электронных посадочных талонов. Несколько авиакомпаний отправляют Aztec Codes на мобильные телефоны пассажиров, чтобы они действовали как посадочные талоны. Они часто интегрируются с приложениями на телефонах пассажиров, включая Apple Wallet .
Aztec-коды также используются на железной дороге, в том числе Tehran Metro , British National Rail , [5] Eurostar , Deutsche Bahn , TCDD Taşımacılık , DSB , SJ , České dráhy , Slovak Railways , Slovenian Railways , Croatian Railways , Trenitalia , Nederlandse Spoorwegen , Pasažieru vilciens , PKP Intercity , VR Group , Via Rail , Swiss Federal Railways , SNCB и SNCF для билетов, продаваемых онлайн и распечатываемых клиентами или отображаемых на экранах мобильных телефонов. Aztec-код сканируется ручным сканером персоналом поезда или на турникете для проверки билета.
Документы о регистрации автомобиля в Польше содержат сводку, сжатую алгоритмом NRV2E, закодированную как Aztec Code. Ведутся работы по предоставлению компаниям по страхованию автомобилей возможности автоматически заполнять соответствующую информацию на основе цифровых фотографий документа в качестве первого шага при заключении нового договора страхования.
Федеральная налоговая служба России кодирует платежную информацию в налоговых уведомлениях с помощью кода Aztec Code.
Многие компании в Канаде теперь также используют эту технологию, включая EastLink , Shaw Cable и Bell Aliant .
Настоящим посвящает публике весь срок действия указанного патента.Нажмите «изображения», а затем «исправление», чтобы увидеть передачу в общественное достояние.