Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 24778-2010 Информационные технологии (ИТ). Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода Aztec Code

     7.3 Кодирование и структура данных в сообщении


Сообщение данных представляет собой последовательность кодовых слов, каждое размером В битов, кодируемых от ядра символа по "спирали" по часовой стрелке в наружном направлении. Эти кодовые слова включают в себя D кодовых слов, точно по числу необходимых для кодирования исходных данных в сообщении, к которым добавляют все контрольные кодовые слова, необходимые для заполнения символа. Указанные кодовые слова следуют в обратном порядке (см. 7.3.3).

7.3.1 Кодирование исходного сообщения

Преобразование последовательности знаков исходных данных в последовательность кодовых слов выполняют в два этапа. На первом этапе все знаки исходных данных последовательно преобразуют в соответствующие двоичные значения, при этом (при необходимости) используют кодовые значения знаков регистра (Shift) и/или знаков фиксации (Latch). Таким образом получают протяженный двоичный поток (строку) входных данных. На втором этапе указанную строку данных преобразуют в последовательность кодовых слов из битов каждое с соблюдением правила исключения, запрещающего вхождение кодовых слов, состоящих только из 0 или только из 1.

7.3.1.1 Преобразование в двоичный поток данных

В таблице 2 приведены значения, присвоенные знакам ASCII в нескольких кодовых наборах, а также управляющим знакам регистра и фиксации для переключения между кодовыми наборами. Кодовые наборы Upper (прописные буквы) и Lower (строчные буквы) содержат прописные и строчные алфавитные буквы соответственно. Кодовый набор Mixed (смешанные знаки) состоит из управляющих знаков ASCII и специальных графических знаков. Кодовый набор Punctuation (знаки пунктуации) состоит из специальных графических знаков и их комбинаций. Кодовый набор Digit (цифры) содержит цифры и некоторые специальные графические знаки. За исключением знака "FLG(n)" представленного ниже, все знаки в таблице 2, не имеющие соответствующих десятичных значений ASCII, представляют функции сдвига регистра или фиксации для перехода к другим кодовым наборам.


Таблица 2 - Высокоуровневое кодирование сообщений в символике Aztec Code

_________________          

* Кодовый набор Upper - набор, содержащий прописные буквы латинского алфавита.     
     Кодовый набор Lower - набор, содержащий строчные буквы латинского алфавита.      
     Кодовый набор Mixed - набор, содержащий управляющие знаки ASCII и специальные графические знаки.     
     Кодовый набор Punctuation - набор, содержащий управляющие знаки ASCII, специальные графические знаки и их комбинации, а также знаки пунктуации.     
     Кодовый набор Digit - набор, содержащий цифры и некоторые специальные графические знаки.



Кодирование сообщения начинают в кодовом наборе Upper, а затем, по мере необходимости, переводят в другие кодовые наборы с использованием знаков фиксации (фиксация кодовых наборов с помощью знаков U/L, L/L, M/L, P/L или D/L) или сдвига регистра (переход в другой кодовый набор только для одного знака с помощью знаков U/S или P/S). В кодовых наборах Upper, Lower, Mixed и Punctuation каждый знак, знаки фиксации или регистра представлены в двоичном потоке данных 5-битовыми значениями, в то время как в кодовым наборе Digit каждый знак, знак фиксации или регистра представлены в кодовом наборе 4-битовыми значениями. Во всех случаях двоичные значения последовательно соединяют друг с другом, начиная со старшего значащего бита.

Режим Byte Shift (B/S) представляет собой особый случай переключения регистра в текстовую строку 8-битовых байтов с динамической кодировкой длины. За знаком B/S следует 5-битовое значение: если оно отличается от нуля, то в нем кодируют число последующих байтов от 1 до 31; если оно равно нулю, то следующие 11 битов кодируют число байтов минус 31. Таким образом, режим Byte Shift позволяет кодировать как изолированные знаки расширенного набора ASCII 8-битовых знаков и управляющие знаки, так и протяженные строки данных в байтах, возможно, кодируемые во всем символе. По завершении строки байтов кодирование возвращается к тому кодовому набору, из которого был активизирован режим B/S.

Знак-указатель FLG(n) в графе "Punctuation" таблицы 2 представляет собой специальный флаг с активизацией "на месте", который используют для представления различных знаков, не относящихся к данным, поддерживаемых многими стандартизованными символиками. В двоичном потоке за значением знака FLG(n) следуют три дополнительных бита, кодирующих аргумент "n" в двоичном виде. Таким образом, значение n находится в диапазоне от нуля до шести (значение семь является недействительным).

Знак FLG(0) представляет собой знак FNC1 - не относящийся к данным флаг, присутствующий в символике Code 128. Если знак FNC1 предшествует первому знаку данных в сообщении, он указывает на структурирование данных в соответствии с правилами GS1 с использованием идентификаторов применения и влияет на значение знака - модификатора идентификатора символики. Если знак FNC1 следует непосредственно за одной прописной или строчной буквой или двумя цифрами в начале сообщения, то в этом случае он сигнализирует о применении другого стандартного отраслевого формата, определяемого предшествующими данными, и тоже влияет на значение знака - модификатора идентификатора символики. Если знак FNC1 находится в любой другой позиции данных, то он выполняет функцию разделителя полей, а его место в выходной строке занимает управляющий знак ASCII (<GS>) с десятичным значением 29.

Знаки FLG(1)-FLG(6) представляют собой флаг интерпретации в расширенном канале ECI (Extended Channel Interpretation), при обнаружении которого устройство считывания, настроенное на использование интерпретации в расширенном канале, вставляет в выходной поток данных последовательность "\nnnnnn", т.е. знак "ОБРАТНАЯ ДРОБНАЯ ЧЕРТА", за которым следует число из шести цифр (указанное устройство считывания также дублирует знак "ОБРАТНАЯ ДРОБНАЯ ЧЕРТА" в закодированных данных и задает соответствующее значение знаку - модификатора идентификатора символики). Аргумент n в данном случае указывает, сколько из шести цифр явно закодировано в символе с использованием кодового набора Digit. При этом предполагают, что остальными цифрами являются начальные нули. Например, ECI 000123 кодируют в форме FLG(3)123, после чего кодирование возвращают к кодовому набору, из которого был активизирован знак FLG(n).

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

7.3.1.2 Формирование кодовых слов данных

На втором этапе кодирования входной поток данных после выбора общего размера символа и определения числа битов в кодовом слове двоичного потока данных в сообщении преобразуют в последовательность кодовых слов данных в сообщении с числом битов , где равно 6, 8, 10 или 12. В общем случае преобразование начинают со старшего значащего бита первого кодового слова с двумя принципиальными исключениями: каждый раз, когда первые -1 битов, помещенных в кодовое слово, состоят из одних "0", в младший значащий бит этого кодового слова вставляют фиктивную "1" и следующий бит данных в сообщении начинает следующее кодовое слово. Аналогично в младший значащий бит кодовых слов данных в сообщении, начинающихся с -1 битов, равных "1", вставляют "0". Таким образом, кодовые слова данных в сообщении, состоящие из одних "0" или"1", являются недействительными и идентифицируются как ошибка стирания в ходе декодирования.

В итоге границы знаков и байтов в исходных данных в сообщении не имеют четкого соответствия с границами кодовых слов. В последнем кодовом слове данных сообщения до -1 битов могут оставаться незаполненными. В этом случае эти биты заполняют "1" (при необходимости с добавлением завершающего фиктивного "0") для устранения любых неоднозначностей.

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

7.3.2 Кодирование кодовых слов исправления ошибок в данных сообщения

В результате кодирования исходного потока формируют кодовых слов. К ним присоединяют контрольных слов, число которых определяют как , вычисляемых с использованием алгоритма циклического кодирования Рида-Соломона над полем Галуа GF(2) для соответствующего примитивного многочлена (таблица 3). Значения контрольных слов соответствуют коэффициентам многочлена, представляющих собой остаток от операций умножения многочлена, образованного кодовыми словами данных в сообщении, на х с последующим длинным делением на порождающий многочлен (х-2)...(х-2) (приложение В, раздел В. 1).


Таблица 3 - Размеры кодовых слов данных и примитивные многочлены

Число слоев в символе

Кодовые слова

Поле Галуа

Примитивный многочлен

Представление в двоичном виде

Представление в десятичном виде

От 1 до 2

6-битовые

GF(64)

х+х+1

1000011

67

От 3 до 8

8-битовые

GF(256)

х+1

100101101

301

От 9 до 22

10-битовые

GF(1024)

х+1

10000001001

1033

От 23 до 32

12-битовые

GF(4096)

х+ х+1

1000001101001

4201



7.3.3 Размещение модулей данных сообщения в символе

В графическом представлении битов данных в сообщении темные модули представляют "1", а светлые модули - "0".

Для размещения в символе Aztec Code последовательность кодовых слов в обратном порядке укладывают в слоев, толщина каждого из которых равна двум модулям. Размещение модулей начинают над левым верхним углом ядра символа по спирали по часовой стрелке в наружном направлении. Чтобы лучше понять точную структуру размещения отдельных модулей, сначала представляют каждое кодовое слово в виде "кирпича" высотой 2 модуля (рисунок 4), а затем разбивают этот "кирпич" на домино шириной 1 модуль. В каждом домино бит старшего разряда расположен над битом младшего разряда. Затем полученные домино размещают в слоях данных, начиная с буквы "С" надписи "Слой 1 ..." на рисунках 2 или 3, а затем поворачивают по часовой стрелке. Позиции, занимаемые решеткой привязки, при этом пропускают. Бит младшего разряда каждого домино всегда расположен ближе к центру символа. Таким образом, домино, размещаемые в нижней части символа, кажутся перевернутыми.