Кодекс ацтеков - Aztec Code

Кодировка: «Это пример ацтекского символа для Википедии».

Код ацтеков - это тип двумерного штрих-кода, изобретенный Эндрю Лонгакром-младшим и Робертом Хасси в 1995 году. Код был опубликован AIM, Inc. в 1997 году. Хотя код ацтеков был запатентован, этот патент официально стал общественным достоянием. Кодекс ацтеков также опубликован как стандарт 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 кодовых слова.

Предполагается, что Aztec Code может создавать читаемые коды с помощью различных технологий печати. Он также хорошо подходит для дисплеев сотовых телефонов и других мобильных устройств.

Кодирование

Процесс кодирования состоит из следующих этапов:

  1. Преобразование исходного сообщения в строку битов
  2. Вычисление необходимого размера символа и сообщения режима, которое определяет размер кодового слова Рида – Соломона
  3. Битовое заполнение сообщения кодовыми словами Рида – Соломона
  4. Добавление сообщения к границе кодового слова
  5. Добавление контрольных кодовых слов
  6. Расположение всего сообщения по спирали вокруг ядра

Все преобразования между строками битов и другими формами выполняются в соответствии с соглашением о обратном порядке байтов (сначала старший значащий бит).

Набор символов

Можно закодировать все 8-битные значения плюс два escape-кода:

  • FNC1, escape-символ, используемый для обозначения наличия идентификатора приложения, так же, как в стандарте GS1-128 .
  • ECI, escape-последовательность, за которой следует 6-значный код интерпретации расширенного канала , который определяет набор символов, используемый для интерпретации следующих байтов.

По умолчанию коды 0–127 интерпретируются в соответствии с ANSI X3.4 ( ASCII ), а коды 128–255 интерпретируются в соответствии с ISO 8859-1 : латинский алфавит № 1. Это соответствует ECI 000003.

Байты преобразуются в 4- и 5-битные коды на основе текущего режима декодирования со сдвигом и кодами защелки для изменения режимов. Байтовые значения, недоступные таким образом, могут быть закодированы с использованием общего кода «двоичного сдвига», за которым следует длина и количество 8-битных кодов.

Для изменения режимов сдвиг влияет только на интерпретацию одного следующего кода, в то время как защелка влияет на все последующие коды. В большинстве режимов используются 5-битные коды, но в цифровом режиме используются 4-битные коды.

Кодировка символов ацтекского кода
Код Режим Код Режим
Верхний Ниже Смешанный Пункт Цифра Верхний Ниже Смешанный Пункт
0 P / S P / S P / S FLG ( n ) P / S 16 О о ^ \ +
1 SP SP SP CR SP 17 п п ^] ,
2 А а ^ А CR LF 0 18 Q q ^^ -
3 B б ^ B . SP 1 19 р р ^ _ .
4 C c ^ C , ИП 2 20 S s @ /
5 D d ^ D : SP 3 21 год Т т \ :
6 E е ^ E ! 4 22 U ты ^ ;
7 F ж ^ F " 5 23 V v _ <
8 г г ^ G # 6 24 W ш ` знак равно
9 ЧАС час ^ H $ 7 25 Икс Икс | >
10 я я ^ Я % 8 26 год Y у ~ ?
11 J j ^ J & 9 27 Z z ^? [
12 K k ^ K ' , 28 год Л / л НАС Л / л ]
13 L л ^ L ( . 29 М / л М / л Ед / л {
14 M м ^ M ) Ед / л 30 D / L D / L P / L }
15 N п ^ [ * НАС 31 год Б / С Б / С Б / С Ед / л
  • Исходный режим - «Верхний».
  • x / S = Перейти в режим x для одного символа; B / S = переход к 8-битному двоичному разряду
  • x / L = фиксировать в режиме x для следующих символов
  • Пункты 2–5 кодируют по два байта каждый.
  • В таблице перечислены символы ASCII, но это байтовые значения, которые закодированы, даже если используются символы, отличные от ASCII.

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-пиксельное слой вокруг сердцевины.

Поскольку L + 1-слойный компактный код Aztec может содержать больше данных, чем полный L-слойный код, полные коды с менее чем 4 уровнями используются редко.

Что наиболее важно, количество слоев определяет размер используемых кодовых слов Рида – Соломона. Это варьируется от 6 до 12 бит:

Полиномы конечных полей ацтекского кода
Биты Поле Полиномиальный Используется для
4 GF (16) х 4 + х +1 Сообщение режима
6 GF (64) х 6 + х +1 1-2 слоя
8 GF (256) х 8 + х 5 + х 3 + х 2 +1 3–8 слоев
10 GF (1024) х 10 + х 3 +1 9–22 слоя
12 GF (4096) х 12 + х 6 + х 5 + х 3 +1 23–32 слоя

Размер b кодового слова - это наименьшее четное число, которое гарантирует, что общее количество кодовых слов в символе меньше предела 2 b -1, который может быть исправлен кодом Рида-Соломона.

Как упоминалось выше, рекомендуется, чтобы не менее 23% доступных кодовых слов плюс 3 были зарезервированы для исправления, а размер символа выбирался таким образом, чтобы сообщение поместилось в доступное пространство.

Битовая начинка

Биты данных разбиты на кодовые слова, причем первый бит соответствует наиболее значимому коэффициенту. При этом кодовые слова из всех нулей и всех единиц избегаются вставкой битов : если первые b -1 бит кодового слова имеют одинаковое значение, в поток данных вставляется дополнительный бит с дополнительным значением. Эта вставка происходит независимо от того, имел ли последний бит кодового слова такое же значение или нет.

Также обратите внимание, что это применимо только к строкам из b -1 бит в начале кодового слова . Допускаются более длинные строки одинаковых битов, если они перекрывают границу кодового слова.

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

Этот процесс увеличивает длину сообщения, и окончательное количество кодовых слов данных, записанных в сообщении режима, не известно, пока оно не будет завершено. В редких случаях может потребоваться перейти к следующему по величине символу и начать процесс заново, чтобы сохранить минимальную долю проверочных слов.

Обивка

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

Кроме того, если общее количество битов данных, доступных в символе, не кратно размеру кодового слова, строка данных снабжается префиксом из соответствующего числа 0 битов, чтобы занять дополнительное пространство. Эти биты не учитываются при вычислении контрольного слова.

Проверить кодовые слова

И к слову режима, и к данным должны быть добавлены контрольные слова, чтобы заполнить доступное пространство. Это вычисляется путем добавления K контрольных слов, так что все сообщение кратно многочлену Рида – Соломона ( x −2) ( x −4) ... ( x −2 K ).

Обратите внимание, что контрольные слова не подлежат заполнению битами и могут иметь значение «все-ноль» или «все-единица». Таким образом, невозможно обнаружить стирание контрольного слова.

Размещение сообщения

9-слойный (53 × 53) код ацтеков, показывающий опорную сетку.

Полный ацтекский кодовый символ имеет, помимо ядра, «справочную сетку» из чередующихся черных и белых пикселей, занимающих каждую 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 бит. Он начинается со старшего разряда числа слоев и заканчивается контрольными словами. Для компактного кода Aztec он разбит на четыре 7-битных части, чтобы оставить место для отметок ориентации. Полный код ацтеков разбит на четыре 10-битных части, каждая из которых делится пополам опорной сеткой.

В некоторых случаях общая емкость матрицы не делится равномерно на полные кодовые слова. В таких случаях основное сообщение дополняется 0 битами в начале. Эти биты не включаются в вычисление контрольного слова и должны быть пропущены во время декодирования. Общая емкость матрицы для полного символа может быть рассчитана как (112 + 16 * L) * L для полного ацтекского кода и (88 + 16 * L) * L для компактного ацтекского кода, где L - размер символа в слоях. . Например, общая емкость матрицы компактного кода Aztec с 1 слоем составляет 104 бита. Поскольку кодовые слова составляют шесть битов, это дает 17 кодовых слов и два дополнительных бита. Два нулевых бита добавляются к сообщению в качестве заполнения и должны быть пропущены во время декодирования.

Дополненное основное сообщение начинается в верхнем левом углу всего символа и закручивается по спирали против часовой стрелки слоем толщиной 2 бита, заканчиваясь непосредственно над левым верхним углом ядра. Это помещает заполненные битами слова данных, для которых могут быть обнаружены стирания, на самых внешних слоях символа, которые наиболее подвержены стиранию. Контрольные слова хранятся ближе к ядру. Последнее контрольное слово заканчивается чуть выше верхнего левого угла яблочка.

Когда ядро ​​находится в его стандартной ориентации, первый бит первого слова данных размещается в верхнем левом углу, а дополнительные биты размещаются в столбце шириной 2 бита слева направо и сверху вниз. Это продолжается до 2-х рядов от нижней части символа, когда шаблон поворачивается на 90 градусов против часовой стрелки, и продолжается в 2-битном верхнем ряду, снизу вверх и слева направо. После 4-х четвертей равного размера спираль продолжается до верхнего левого угла следующего внутреннего слоя, заканчиваясь на один пиксель выше верхнего левого угла ядра.

Наконец, 1 бит печатается как черные квадраты, а 0 бит печатается как белые квадраты.

использование

Онлайн-билет от Deutsche Bahn. Обратите внимание, что штрих-код Aztec в этом образце билета не читается в обычном приложении, потому что центр другой.

Транспорт

Коды ацтеков широко используются для оформления транспортных билетов.

Код Aztec был выбран авиационной отраслью ( стандарт IATA BCBP ) для электронных посадочных талонов. Некоторые авиакомпании отправляют коды Aztec на мобильные телефоны пассажиров в качестве посадочных талонов. Они часто интегрируются с приложениями на телефонах пассажиров, включая Apple Wallet .

Коды ацтеков также используются на железных дорогах, в том числе в Tehran Metro , Eurostar , Deutsche Bahn , TCDD Taşımacılık , DSB , České dráhy , Словацкие железные дороги , Словенские железные дороги , Хорватские железные дороги , Trenitalia , Nederlandse Spoorwegen , PKP Intercity , VR Group , National Rail , Via Железные дороги , Швейцарские федеральные железные дороги , SNCB и SNCF для билетов, продаваемых онлайн и распечатываемых клиентами или отображаемых на экранах мобильных телефонов. Код Aztec сканируется портативным сканером персоналом в поезде или на турникете для подтверждения билета.

Правительственный

Документы о регистрации автомобиля в Польше содержат краткое изложение, сжатое алгоритмом NRV2E, зашифрованное как Aztec Code. Ведутся работы, позволяющие компаниям по страхованию автомобилей автоматически заполнять соответствующую информацию на основе цифровых фотографий документа в качестве первого шага при заключении нового договора страхования.

Федеральная налоговая служба в России кодирует платежную информацию в налоговых уведомлениях как Aztec Code.

Коммерческий

Многие счета в Канаде теперь также используют эту технологию, в том числе EastLink (компания) , Shaw Cable , Bell Aliant и многие другие.

использованная литература

внешние ссылки