ГОСТ ISO/IEC 24724-2011
МЕЖГОСУДАРСТВЕННЫЙ СТАНДАРТ
Информационные технологии
ТЕХНОЛОГИИ АВТОМАТИЧЕСКОЙ ИДЕНТИФИКАЦИИ И СБОРА ДАННЫХ
Спецификация символики штрихового кода GS1 DataBar
Information technologies. Automatic identification and data capture techniques. GS1 DataBar bar code symbology specification
МКС 01.080.50;
35.040
Дата введения 2012-07-01
Предисловие
Цели, основные принципы и общие правила проведения работ по межгосударственной стандартизации установлены ГОСТ 1.0 "Межгосударственная система стандартизации. Основные положения" и ГОСТ 1.2 "Межгосударственная система стандартизации. Стандарты межгосударственные, правила и рекомендации по межгосударственной стандартизации. Правила разработки, принятия, обновления и отмены"
Сведения о стандарте
1 ПОДГОТОВЛЕН Ассоциацией автоматической идентификации "ЮНИСКАН/ГС1 РУС" (ГС1 РУС) при участии Общества с ограниченной ответственностью (ООО) НПЦ "Интелком" (Российская Федерация) в рамках Межгосударственного технического комитета МТК 517 "Технологии автоматической идентификации и сбора данных и биометрия" на основе собственного перевода на русский язык англоязычной версии стандарта, указанного в пункте 5, выполненного ГС1 РУС
2 ВНЕСЕН Федеральным агентством по техническому регулированию и метрологии Российской Федерации
3 ПРИНЯТ Межгосударственным советом по стандартизации, метрологии и сертификации (протокол от 2 сентября 2011 г. N 47)
За принятие проголосовали:
Краткое наименование страны | Код страны | Сокращенное наименование национального органа по стандартизации |
Азербайджан | AZ | Азстандарт |
Беларусь | BY | Госстандарт Республики Беларусь |
Киргизия | KG | Кыргызстандарт |
Молдова | MD | Молдова-Стандарт |
Россия | RU | Росстандарт |
Узбекистан | UZ | Узстандарт |
Украина | UA | Минэкономразвития Украины |
4 Приказом Федерального агентства по техническому регулированию и метрологии от 21 ноября 2011 г. N 566-ст межгосударственный стандарт ГОСТ ISO/IEC 24724-2011 введен в действие для добровольного применения в качестве национального стандарта Российской Федерации с 1 июля 2012 г.
5 Настоящий стандарт идентичен международному стандарту ISO/IEC 24724:2011* "Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода GS1 DataBar" ("Information technology - Automatic identification and data capture techniques - GS1 DataBar bar code symbology specification", IDT), за исключением дополнительных приложений ДА и ДБ, содержащих сведения о системе GS1 и перечень национальных организаций GS1 в странах - членах МГС.
________________
* Доступ к международным и зарубежным документам, упомянутым в тексте, можно получить, обратившись в Службу поддержки пользователей. - .
При применении настоящего стандарта рекомендуется использовать вместо ссылочных международных стандартов соответствующие им межгосударственные и национальные стандарты, сведения о которых приведены в дополнительном приложении ДВ
6 ВВЕДЕН ВПЕРВЫЕ
7 Следует обратить внимание на возможность того, что часть содержания данного стандарта может быть объектом патентных прав. ISO и IEC не несут ответственности за определение отдельных или всех подобных патентных прав
8 ПЕРЕИЗДАНИЕ. Июнь 2020 г.
Информация о введении в действие (прекращении действия) настоящего стандарта и изменений к нему на территории указанных выше государств публикуется в указателях национальных стандартов, издаваемых в этих государствах, а также в сети Интернет на сайтах соответствующих национальных органов по стандартизации.
В случае пересмотра, изменения или отмены настоящего стандарта соответствующая информация будет опубликована на официальном интернет-сайте Межгосударственного совета по стандартизации, метрологии и сертификации в каталоге "Межгосударственные стандарты"
Введение
Для обеспечения поддержки международной организацией GS1 символики, ранее называемой Символика ограниченных размеров (Reduced Space Symbology (RSS)), было присвоено новое наименование - GS1 DataBar.
Семейство GS1 DataBar включает в себя три типа линейных символик, предназначенных для применения в системе GS1. Первый тип символики представлен четырьмя видами символов штрихового кода: GS1 DataBar для всенаправленного считывания (далее - GS1 DataBar Всенаправленный) (GS1 DataBar Omnidirectional), GS1 DataBar Усеченный (GS1 DataBarTruncated),GS1 DataBar Двустрочный (GS1 DataBar Stacked) и GS1 DataBar Двустрочный для всенаправленного считывания (далее - GS1 DataBar Двустрочный Всенаправленный) (GS1 DataBar Stacked Omnidirectional). Двустрочные виды символов относят к многострочным символам. Второй тип символики представлен только одним типом символов штрихового кода - GS1 DataBar Ограниченный (GS1 DataBar Limited). Третий тип символики представлен двумя видами символов штрихового кода: символы с одной строкой (GS1 DataBar Расширенный для всенаправленного считывания (далее - GS1 DataBar Расширенный Всенаправленный) (GS1 DataBar Expanded Omnidirectional) и многострочные символы (GS1 DataBar Расширенный Многострочный для всенаправленного считывания (далее - GS1 DataBar Расширенный Многострочный Всенаправленный) (GS1 DataBar Expanded Stacked Omnidirectional). Использование символики GS1 DataBar должно соответствовать требованиям GS1, установленным в Общих спецификациях GS1.
_______________
Сведения о системе GS1 приведены в дополнительном приложении ДА.
Символы GS1 DataBar Всенаправленный (GS1 DataBar Omnidirectional) и GS1 DataBar Двустрочный Всенаправленный (GS1 DataBar Stacked Omnidirectional) обеспечивают кодирование полной 14-разрядной структуры данных GS1 для идентификации предметов, называемой глобальным номером предмета торговли (Global Trade Item Number или GTIN), в линейном символе штрихового кода, который может быть сканирован на кассовых терминалах путем всенаправленного считывания запрограммированными соответствующим образом сканерами. Символы штрихового кода GS1 DataBar Усеченный (GS1 DataBar Truncated) и GS1 DataBar Двустрочный (GS1 DataBar Stacked) обеспечивают кодирование в линейном символе 14-разрядной структуры данных GS1 для идентификации предметов, но они не пригодны для всенаправленного сканирования. Символы штрихового кода GS1 DataВаr Ограниченный (GS1 DataBar Limited) обеспечивают кодирование 14-разрядной структуры данных GS1 для идентификации предметов со значением разряда индикатора ноль или один в линейном символе, применяемом при маркировании мелких предметов, и не подлежат сканированию на кассовыхтерминалах. Символы GS1 DataBar Расширенный (GS1 DataBar Expanded) обеспечивают кодирование структуры данных GS1 для идентификации предметов, а также дополнительных строк элементов с идентификаторами применения AI, представляющих, например, массу товара и дату реализации в линейном символе, который может быть сканирован на кассовых терминалах путем всенаправленного считывания запрограммированными соответствующим образом сканерами.
Любой символ семейства символик GS1 DataBar может быть напечатан как самостоятельный линейный символ или как часть символа GS1 Композитный (GS1 Composite), являющаяся линейным компонентом в символике GS1 DataBar, над которым размещают соответствующий двумерный компонент.
Символы GS1 DataBar предназначены для кодирования идентификационных номеров и данных, дополняющих идентификацию. Управление системой нумерации GS1 гарантирует всемирную уникальность идентификационных кодов, присвоенных конкретным предметам, а также последовательность присвоения этих кодов и связанных с ними соответствующих дополнительных данных. Основным преимуществом для пользователей системы GS1 является соответствие единообразно определяемых идентификационных кодов и форматов дополнительных данных требованиям, предъявляемым при проведении торговых операций.
Сноски в тексте стандарта, выделенные курсивом, приведены для пояснения текста оригинала.
1 Область применения
Настоящий стандарт устанавливает требования к семейству символик GS1 DataBar, показатели данного семейства символик, кодирование знаков данных, форматы символов, размеры, требования к качеству печати символов, алгоритмы обнаружения ошибок и декодирования.
Требования к двумерным компонентам символов GS1 Композитный (GS1 Composite) установлены в ISO/IEC 24723.
2 Нормативные ссылки
В настоящем стандарте использованы нормативные ссылки на следующие стандарты*. Для датированных ссылок применяют только указанное издание ссылочного стандарта, для недатированных - последнее издание (включая все изменения).
ISO/IEC 646, Information technology - ISO 7-bit coded character set for information interchange (Информационные технологии. 7-битовый кодовый набор знаков ИСО для обмена информацией)
ISO 4217, Codes for the representation of currencies and funds (Коды для представления валют и фондов)
_____________________
Заменен на ISO 4217:2015.
ISO/IEC 15416, Information technology - Automatic identification and data capture techniques - Bar code print quality test specification - Linear symbols (Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация испытаний качества печати штрихового кода. Линейные символы)
_____________________
Заменен на ISO/IEC 15416:2016.
ISO/IEC 15417, Information technology - Automatic identifi cation and data capture techniques - Bar code symbology specification - Code 128 (Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода Code 128)
ISO/IEC 15420, Information technology - Automatic identification and data capture techniques - EAN/UPC bar code symbology specification (Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода EAN/UPC)
ISO/IEC 19762-1, Information technology - Automatic identification and data capture (AIDC) techniques - Harmonized vocabulary - Part 1: General terms relating to AIDC [Информационные технологии. Технологии автоматической идентификации и сбора данных (АИСД). Гармонизированный словарь. Часть 1. Общие термины в области АИСД]
_____________________
Заменен на ISO/IEC 19762:2016.
ISO/IEC 19762-2, Information technology - Automatic identification and data capture (AIDC) techniques - Harmonized vocabulary - Part 2: Optically readable media (ORM) [Информационные технологии. Технологии автоматической идентификации и сбора данных (АИСД). Гармонизированный словарь. Часть 2. Оптические носители данных (ОНД)]
_____________________
Заменен на ISO/IEC 19762:2016.
ISO/IEC 24723, Information technology - Automatic identifi cation and data capture techniques - GS1 Composite bar code symbology specifi cation (Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода GS1 Композитный)
3 Термины и определения, сокращения, математические операторы и условные обозначения
3.1 Термины и определения
В настоящем стандарте применены термины и определения, установленные в ISO/IEC 19762-1 и ISO/IEC 19762-2, а также следующие термины с соответствующими определениями.
Примечание - Для терминов, определенных в настоящем разделе, и ряда терминов ISO/IEC 19762 применимы приведенные ниже определения.
3.1.1 двумерный компонент (2D component): Двумерная составляющая символа GS1 Композитный (GS1 Composite), кодирующая дополнительную информацию о предмете, например номер партии или дату окончания срока годности.
3.1.2 строка элемента с идентификатором применения (Al element string): Строка знаков, содержащая идентификатор применения, за которым следует соответствующее поле данных.
3.1.3 методы кодирования (encodation methods): Схемы уплотнения, применяемые в GS1 DataBar Расширенный (GS1 DataBar Expanded) и двумерных компонентах для кодирования типовых строк элементов с идентификаторами применения в строки с двоичным представлением, являющиеся более короткими, чем при использовании универсального метода уплотнения данных для указанной символики.
3.1.4 разряд индикатора (indicator digit): Начальный разряд идентификационного номера предмета торговли GTIN-14, предназначенный для обозначения нескольких уровней (вложения) упаковки или для указания на предмет торговли переменной величины.
3.1.5 линейный компонент (linear component): Линейная часть символа GS1 Композитный (GS1 Composite), кодирующая основные идентификационные данные предмета торговли.
3.1.6 флаг сопровождения (linkage flag): Указатель, закодированный в линейном компоненте - символе GS1 DataBar или GS1-128, уведомляющий о сопровождении линейного компонента двумерным.
3.1.7 сегмент (segment): Минимальная декодируемая часть символа штрихового кода, которая в символике GS1 DataBar состоит из знака символа и смежного с ним шаблона поиска.
3.1.8 GS1-128 (GS1-128): Определенное в Общих спецификациях GS1 подмножество символики Code 128, установленной ISO/IEC 15417.
3.1.9 декодирование с подсчетом (voting): Метод декодирования, в соответствии с которым декодированные значения сегмента сохраняются вместе с подсчитанным числом случаев их декодирования.
Примечание - Декодирование с подсчетом используют для декодирования символов GS1 DataBar по сегментам, например, в случае использования всенаправленного сканирования.
3.2 Сокращения
AI - идентификатор применения (Application Identifier) (по ISO/IEC 15418).
2D - двумерный.
3.3 Математические операторы и условные обозначения
В настоящем стандарте применяются следующие математические операторы:
div - оператор целочисленного деления, который отбрасывает остаток от деления, сохраняя при этом целочисленное значение частного отделения;
mod - оператор целочисленного деления, который отбрасывает частное, сохраняя при этом целочисленное значение остатка от деления.
В настоящем стандарте используются следующие условные обозначения, принятые в ISO:
0,2 - знак "ЗАПЯТАЯ" для обозначения десятичной дроби (например, 0,2 равно 2/10), за исключением случаев, когда его применяют для индексирования или как знак-разделитель в записи (n,k);
12 345 - знак "ПРОБЕЛ" между цифрами указывает на разряды тысяч.
4 Описание символов
4.1 Типы символов GS1 DataBar
Символика GS1 DataBar включает в себя три типа символов:
Первый тип символов GS1 DataBar представлен четырьмя видами:
- GS1 DataBar для всенаправленного считывания (далее - GS1 DataBar Всенаправленный) (GS1 DataBar Omnidirectional);
- GS1 DataBar Усеченный (GS1 DataBar Truncated);
- GS1 DataBar Двустрочный (GS1 DataBar Stacked);
- GS1 DataBar Двустрочный для всенаправленного считывания (далее - GS1 DataBar Двустрочный Всенаправленный) (GS1 DataBar Stacked Omnidirectional).
Второй тип символов GS1 DataBar включает в себя только один вид:
- GS1 DataBar Ограниченный (GS1 DataBar Limited).
Третий тип символов GS1 DataBar включает в себя два вида:
- GS1 DataBar Расширенный (GS1 DataBar Expanded);
- GS1 DataBar Расширенный Многострочный (GS1 DataBar Expanded Stacked).
Все символы GS1 DataBar первого типа содержат четыре знака символа в каждом символе и имеют одинаковые правила кодирования и одинаковую структуру.
Символы GS1 DataBar второго типа отличаются по структуре от символов первого типа, содержат два знака символа и используют отличающиеся от предыдущего типа правила кодирования.
Символы GS1 DataBar третьего типа имеют особую структуру, определяемую символикой, набор правил кодирования и могут содержать в себе переменное число знаков символа.
Символы GS1 DataBar Всенаправленный, GS1 DataBar Двустрочный Всенаправленный, GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный предназначены для посегментного считывания с помощью всенаправленных сканеров.
Примечание - В приложении J приведен сводный перечень показателей символов GS1 DataBar всех типов.
4.2 Показатели символики
К показателям семейства символик GS1 DataBar относят:
a) набор кодируемых знаков:
1) для символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataВаr Ограниченный: цифры от 0 до 9;
2) для символов GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный - подмножество знаков 7-битового кодированного набора знаков по ISO/IEC 646, состоящее из прописных и строчных букв, цифр и 20 выбранных специальных графических знаков (знаков пунктуации) с добавлением функционального знака 1 - FNC1;
_______________
Имеются в виду буквы латинского алфавита.
b) структуру знака символа. Для каждого типа символов символики используют различные знаки символов со структурой (n,k), где n - число модулей в знаке символа. Модули размещаются в k штрихах и k пробелах;
c) тип кода - непрерывный штриховой код, линейная символика;
d) максимальный объем кодируемых данных (включая, где следует, предполагаемые идентификаторы применения без учета закодированных функциональных знаков FNC1):
1) для символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Ограниченный - идентификатор применения (01) вместе с 14-разрядным числовым идентификатором предмета торговли;
2) для символов GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный - 74 цифры или 41 алфавитный знак.
Примечание - Объем кодируемых данных для символа GS1 DataBar Расширенный зависит от метода кодирования. Максимальный объем составляет 74 цифры для структуры данных с идентификатором применения (01) с добавлением структур данных с другими идентификаторами применения при условии, что объем каждой структуры данных с идентификатором применения не более 70 цифр и не более 77 цифр для структур данных с идентификатором применения (01), идентификатором применения (392х) и каким-либо иным идентификатором применения;
e) метод обнаружения ошибок:
1) для символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный - вычисление контрольной суммы по модулю 79;
2) для символов GS1 DataBar Ограниченный - вычисление контрольной суммы по модулю 89;
3) для символов GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный - вычисление контрольной суммы по модулю 211;
f) самоконтроль знака - присутствует;
g) двунаправленное декодирование - поддерживается.
4.3 Дополнительные свойства
К дополнительным свойствам символики GS1 DataBar относят:
a) уплотнение данных. Для любого символа семейства GS1 DataBar методы уплотнения данных оптимизированы для строк данных, подлежащих кодированию. Символы GS1 DataBar Расширенный оптимизированы для применяемых на практике конкретных сочетаний строк элементов с идентификаторами применения;
b) связь компонентов. Все символы семейства символик GS1 DataBar содержат флаг сопровождения. Если флаг сопровождения не установлен, т.е. равен 0, то символ GS1 DataBar является самостоятельным отдельно расположенным символом. Если флаг сопровождения установлен, т.е. равен 1, то линейный компонент символа семейства GS1 DataBar через шаблон-разделитель связан с двумерным компонентом;
c) эмуляцию символов GS1-128. Устройства считывания штрихового кода, настроенные на режим эмуляции символов GS1-128, передают данные, закодированные в символах семейства символик GS1 DataBar, как данные, закодированные в одном или нескольких символах GS1-128.
4.4 Структура символа
Каждый символ GS1 DataBar содержит внешние шаблоны-ограничители, знаки символа и шаблоны поиска. Кроме того, каждый символ включает в себя средства обнаружения ошибок.
Шаблоны - ограничители символов GS1 DataBar первого и третьего типов состоят из двух элементов шириной один модуль, образующих по обоим сторонам символа либо пару штрих/пробел, либо пару пробел/штрих. В символах GS1 DataBar Двустрочный и GS1 DataBar Расширенный Многострочный шаблоны-ограничители расположены по обеим сторонам каждой строки символа. Символы GS1 DataBar Ограниченный имеют особые требования к шаблону - ограничителю символа и предназначены для предотвращения ошибочного считывания. В приложении I.1 приведены рекомендации по печати элементов внешних шаблонов-ограничителей.
Каждый символ включает в себя два или более знаков символа, каждый из которых имеет структуру (n,k). Путем математических комбинаций значений знаков символов получают однозначные значения закодированных данных.
Шаблон поиска - это набор элементов, выбранных таким образом, чтобы они могли быть идентифицированы декодером с целью распознавания символа и определения относительного положения его элементов. Каждый символ содержит один или более шаблонов поиска. Шаблоны поиска также выполняют функцию контрольного знака и/или идентификаторов сегментов.
Все символы GS1 DataBar включают в себя флаг сопровождения. Если флаг сопровождения установлен, символ GS1 DataBar является линейным компонентом и вместе с прилегающим к нему шаблоном-разделителем должен быть увязан с двумерным компонентом по ISO/IEC 24723. Как правило, линейный компонент, являющийся символом GS1 DataBar, прилегающий к нему шаблон-разделитель и двумерный компонент печатаются одновременно и образуют единый символ GS1 Композитный. В случае предварительной печати линейного компонента GS1 DataBar с флагом сопровождения и последующим дополнительным нанесением двумерного компонента шаблон-разделитель должен быть напечатан с линейным компонентом GS1 DataBar по ISO/IEC 24723.
_______________
Символа GS1 Композитный.
Для некоторых видов символов GS1 DataBar не допускается инвертирование по цвету штрихов и пробелов, т.е. штрихи должны быть только темными, а пробелы - светлыми. Сканеры не должны предпринимать попыток декодирования комбинаций инвертированных штрихов и пробелов, т.к. может произойти ошибочное считывание инвертированных символов GS1 DataBar.
5 Требования к символам GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный и GS1 DataBar Двустрочный Всенаправленный
5.1 Основные показатели символа GS1 DataBar Всенаправленный
Символ GS1 DataBar Всенаправленный представлен линейной символикой, позволяющей закодировать 20000000000000 (2х10) числовых значений. Эти числовые значения выражены в 14 цифрах. Первая цифра обозначает флаг сопровождения, следующие 13 цифр - знаки данных. 13 знаков данных, включая контрольную цифру, образуют 14-разрядный идентификационный номер предмета GS1 вместе с начальным разрядом индикатора. Значения, равные или большие 10000000000000, указывают на заданный флаг сопровождения и, следовательно, присутствие двумерного компонента. Например, значение 10001234567890 кодирует предмет с идентификационным номером 00012345678905 и флагом сопровождения, равным 1.
Символы GS1 DataBar Всенаправленный могут быть сканированы и декодированы по четырем сегментам с последующим восстановлением полного символа, что обеспечивает возможность всенаправленного сканирования. Пример несвязанного линейного символа GS1 DataBar Всенаправленный, кодирующего значение 20012345678909 (при значении флага сопровождения, равном нулю), приведен на рисунке 1.
Рисунок 1 - Линейный символ GS1 DataBar Всенаправленный, представляющий номер (01)20012345678909
Примечание - Начальные цифры (01) представляют собой подразумеваемый идентификатор применения, который не подлежит кодированию в символе. Последний разряд номера (9) не кодируют в символе напрямую, он представляет собой вычисляемую по модулю 10 контрольную цифру. Правила вычисления контрольной цифры приведены в приложении А. В приложении F приведен пример кодирования символа GS1 DataBar Всенаправленный.
5.2 Структура символа GS1 DataBar Всенаправленный
Символ GS1 DataBar Всенаправленный состоит из восьми областей (слева направо), включающих в себя 96 модулей (рисунок 2):
a) первая область состоит из одного пробела и одного штриха шириной один модуль каждый и соответствует левому шаблону-ограничителю;
b) вторая область состоит из четырех пробелов и четырех штрихов общей шириной 16 модулей и соответствует первому знаку символа со структурой (n,k) = (16,4);
c) третья область состоит из трех пробелов и двух штрихов общей шириной 15 модулей и соответствует левому шаблону поиска;
d) четвертая область состоит из четырех штрихов и четырех пробелов общей шириной 15 модулей (при считывании справа налево) и соответствует второму знаку символа со структурой (n,k) = (15,4);
e) пятая область состоит из четырех штрихов и четырех пробелов общей шириной 15 модулей и соответствует четвертому знаку символа со структурой (n,k) = (15,4);
f) шестая область состоит из трех штрихов и двух пробелов общей шириной 15 модулей (при считывании справа налево) и соответствует правому шаблону поиска;
g) седьмая область состоит из четырех пробелов и четырех штрихов общей шириной 16 модулей (при считывании справа налево) и соответствует третьему знаку символа со структурой (n,k) = (16,4);
h) восьмая область состоит из одного пробела и одного штриха шириной один модуль каждый и соответствует правому шаблону-ограничителю.
Примечание - Порядок расположения элементов знака символа определен по направлению к прилегающему к нему шаблону поиска.
Рисунок 2 - Линейный символ GS1 DataBar Всенаправленный, представляющий номер (01)04412345678909
Полный символ включает в себя 46 элементов (штрихов и пробелов), содержащих 96 модулей. В таблице Е.1 приложения Е приведены 46 элементов символа GS1 DataBar Всенаправленный. Символ GS1 DataBar Всенаправленный, предназначенный для всенаправленного сканирования, должен иметь высоту, равную или более 33X (33 модуля).
_______________
Размер X соответствует модулю.
Символ не требует наличия свободных зон. Ширина первого и последнего элементов в символе может быть более одного модуля при совпадении по цвету смежной с ними области подложки (светлой слева или темной справа), что не оказывает влияния на считывание символа.
5.2.1 Структура знака символа
Каждый из четырех знаков символа имеет структуру (n,k). Значение n равно 16 для первого и третьего (внешних) знаков символов и 15 для второго и четвертого (внутренних) знаков символов. Значение k равно 4.
На рисунке 2 стрелками показано направление следования элементов в каждом знаке символа. Элементы первого и четвертого знаков символа расположены слева направо, а элементы второго и четвертого знаков - справа налево, так что порядок следования элементов знаков символа всегда определяют по направлению к прилегающему шаблону поиска.
Каждый знак символа содержит два поднабора элементов - элементы с четной и нечетной нумерацией. Понятия "с четной" и "с нечетной" нумерацией соотносятся с порядковым номером элементов в каждом поднаборе. Например, поднабор с нечетной нумерацией состоит из первого, третьего, пятого и седьмого элементов в каждом знаке символа, начиная с наиболее удаленного элемента от прилегающего к этому знаку шаблона поиска. В первом и втором знаках символа нечетные элементы являются пробелами, а четные - штрихами. В третьем и четвертом знаках символа нечетные элементы являются штрихами, а четные - пробелами.
5.2.2 Значение знака символа
Каждому значению знака символа по определенному алгоритму для поднаборов четных и нечетных элементов присваивают шаблон значений ширины элементов. Кроме того, по данному алгоритму задают число элементов, число модулей, максимальную ширину элемента, а также указание на присутствие в поднаборе всех элементов подмножества шириной более одного модуля. В приложении В для символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный и GS1 DataBar Двустрочный Всенаправленный приведен алгоритм формирования элементов знака символа, написанный на языке программирования С.
5.2.2.1 Значения внешних знаков символа
Действительные поднаборы четных элементов внешних знаков символа (первый и третий знаки символа) должны содержать хотя бы один элемент шириной один модуль. Действительные поднаборы нечетных элементов этих знаков могут не иметь в своем составе ни одного элемента шириной один модуль. Указанное ограничение по ширине для четных элементов обеспечивает наличие в знаках символа уникальных сумм модулей для размера, задаваемого "от края до подобного края" (штрих плюс пробел и пробел плюс штрих).
В таблице 1 приведены характеристики поднаборов элементов знака символа со структурой (16,4), а также пары элементов четного и нечетного поднаборов по пяти группам, на которые разделено общее число сочетаний элементов в знаке символа. Оба поднабора имеют четное число модулей. Максимальная ширина элементов установлена таким образом, чтобы число модулей в паре смежных элементов никогда не превышало девяти модулей. Общее число комбинаций элементов в знаке символа со структурой (16,4) равно 2841. Значение знака символа со структурой (16,4) вычисляют следующим образом
,
где - общее число комбинаций элементов четного поднабора;
- значение для нечетного поднабора;
- значение для четного поднабора;
- сумма произведений значений каждой предыдущей группы по таблице 1.
Для вычисления значений и используют значение знака символа :
;
.
Например, необходимо закодировать знак символа со структурой (16,4) и значением 2315. По таблице 1 определяют, что значение знака символа находится в диапазоне от 2015 до 2714, что соответствует группе 4, 2015, a 70. Применяя приведенные выше уравнения, получают:
(2315-2015) div 70=300 div 70=4;
(2315-2015) mod 70=300 mod 70=20.
Значение знака символа 2315 находится в группе 4 (таблица 1). Знак символа содержит нечетный поднабор элементов общей шириной 6 модулей и соответствующей величиной 4 из 10 возможных значений (в диапазоне от 0 до 9) и четного поднабора элементов общей шириной 10 модулей и соответствующей величиной 20 из 70 возможных значений (в диапазоне от 0 до 69). С помощью процедур, изложенных в приложении В, получают значения ширины нечетных элементов соответственно {1 2 2 1} модулей, а значения ширины четных элементов соответственно {1 5 1 3} модулей. Таким образом, ширина элементов знака символа составляет {1 1 2 5 2 1 1 3} модулей в направлении к шаблону поиска, обозначенному стрелкой на рисунке 2.
Таблица 1 - Характеристики внешнего знака символа со структурой (16,4)
Диапазон значений | Группа | Сумма предыдущих групп | Отношение числа модулей в нечетном/четном поднаборах | Отношение значений самых широких элементов в нечетном/четном поднаборах, модули | Общее число комбинаций элементов нечетного поднабора | Общее число комбинаций элементов четного поднабора |
От 0 до 160 | 1 | 0 | 12/4 | 8/1 | 161 | 1 |
От 161 до 960 | 2 | 161 | 10/6 | 6/3 | 80 | 10 |
От 961 до 2014 | 3 | 961 | 8/8 | 4/5 | 31 | 34 |
От 2015 до 2714 | 4 | 2015 | 6/10 | 3/6 | 10 | 70 |
От 2715 до 2840 | 5 | 2715 | 4/12 | 1/8 | 1 | 126 |
5.2.2.2 Значения внутренних знаков символа
Комбинации нечетных элементов внутренних знаков символа (второй и четвертый знаки символа) должны иметь в своем составе хотя бы один элемент шириной один модуль. Действительные поднаборы четных элементов этих знаков могут не содержать ни одного элемента шириной один модуль. Указанные ограничения для четных элементов обеспечивают наличие в знаках символа уникальных сумм модулей для размера, задаваемого "от края до подобного края" (штрих плюс пробел и пробел плюс штрих).
В таблице 2 приведены характеристики поднаборов элементов в знаках символа со структурой (15,4) а также перечень пар элементов, взятых из четных и нечетных поднаборов по четырем группам. Нечетный поднабор элементов имеет нечетное число модулей, а четный - четное число модулей. Максимальные размеры элементов в модулях установлены так, чтобы их число в паре смежных элементов было не более девяти модулей. Общее число комбинаций элементов в знаке символа со структурой (15,4) равно 1597. Диапазон допустимых значений нечетного поднабора элементов имеет ограничение для значения ширины крайнего внутреннего элемента (нечетного элемента с номером 1), которое не должно быть более четырех модулей.
Таблица 2 - Характеристики внутреннего знака символа со структурой (15,4)
Диапазон значений | Группа | Сумма предыдущих групп | Отношение числа модулей в нечетном/четном поднаборах | Отношение значений самых широких элементов в нечетном/четном поднаборах, модули | Общее число комбинаций элементов нечетного поднабора | Общее число комбинаций элементов четного поднабора |
От 0 до 335 | 1 | 0 | 5/10 | 2/7 | 4 | 84 |
От 336 до 1035 | 2 | 336 | 7/8 | 4/5 | 20 | 35 |
От 1036 до 1515 | 3 | 1036 | 9/6 | 6/3 | 48 | 10 |
От 1516 до 1596 | 4 | 1516 | 11/4 | 8/1 | 81 | 1 |
Значение знака символа со структурой (15,4) вычисляют по формуле
,
где - общее число комбинаций элементов нечетного поднабора;
- значение для четного поднабора;
- значение для нечетного поднабора;
- сумма произведений значений каждой предыдущей группы.
Для вычисления значений и используют значение знака символа :
;
.
Следует обратить внимание на то, что смысл четного и нечетного поднаборов элементов меняется в этих вычислениях на противоположный по сравнению с внешними знаками символа со структурой (16,4).
5.2.3 Значение символа
Значение символа вычисляют путем комбинации значений левой и правой пар знаков символа. Значение каждой пары знаков символа образуется путем комбинации значений внешнего и внутреннего знаков символа. Пары знаков символа и диапазоны их значений приведены в таблице 3.
Значение пары знаков символа вычисляют по формуле
,
где и - значения внешнего и внутреннего знаков символа соответственно.
Таблица 3 - Значения пар знаков символа
Внешний знак символа | Внутренний знак символа | Пара знаков символа | |||
Структура (n,k) | Число комбинаций () | Структура (n,k) | Число комбинаций () | Число комбинаций | Диапазон значений |
(16,4) | 2841 | (15,4) | 1597 | 4537077 | От 0 до 4537076 |
Для кодирования значений внешнего и внутреннего знаков символа ( и соответственно) исходя из значения , используют формулы:
;
.
Например, значение пары знаков символа - 1971265. Рассчитывают значения внешнего и внутреннего знаков символа и :
;
.
Значение символа вычисляют путем комбинаций значений левой и правой пар знаков символа по следующей формуле
,
где - значение символа;
и - значения правой и левой пар знаков символа.
Значения левой и правой пар знаков символа ( и соответственно) по значению символа вычисляют по формулам:
;
.
Например, значение символа - 1234567890. Значения левой и правой пар знаков символа ( и соответственно) вычисляют по формулам:
;
.
Путем комбинации значений знаков символа получают 20585067703929 значений, однако применяют только первые 20000000000000 значений (от 0 до 19999999999999). Старшим разрядом является значение флага сопровождения двумерным компонентом, которое равно 0 для каждого отдельного символа GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный и 1 в случае, если к линейному символу GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный добавляют двумерный компонент. Указанные значения флага сопровождения отделяют от остальных 13 цифр при создании идентификационного обозначения предмета. Для формирования идентификационного номера GTIN-14 вычисляют и добавляют в конец обозначения подразумеваемую контрольную цифру, вычисленную по модулю 10. Начальный префикс идентификатора применения (01) добавляют к передаваемым данным непосредственно после подлежащего обязательной передаче идентификатора символики ]е0 или ]С1.
5.2.4 Шаблоны поиска
Каждый символ имеет два шаблона поиска, которые используют для кодирования контрольной суммы символа. Каждый шаблон поиска может кодировать девять значений. Шаблоны поиска расположены между первым и вторым, а также между четвертым и третьим знаками символа соответственно. Поскольку шаблоны поиска примыкают ко всем четырем знакам символа, символ сканируют по четырем сегментам. Каждый сегмент содержит знак символа и шаблон поиска.
5.2.4.1 Структура шаблона поиска
Каждый из двух шаблонов поиска состоит из пяти элементов, содержащих 15 модулей. Левый шаблон поиска начинается и заканчивается пробелом, а правый шаблон поиска начинается и заканчивается штрихом. Элементы шаблона поиска нумеруют в направлении снаружи вовнутрь символа (рисунок 2).
Сумма модулей элементов с номерами 2 и 3 находится в диапазоне от 10 до 12, а сумма модулей элементов с номерами 4 и 5 равна 2. Отношение совокупной ширины в паре элементов 2 и 3 к общей ширине четырех смежных элементов 2, 3, 4 и 5 находится в диапазоне от 10:12 до 12:14. Эти отношения используют на первом этапе логики распознавания шаблона поиска. Значения ширины элементов шаблона поиска (в модулях) для девяти кодируемых значений шаблона поиска приведены в таблице 4.
Таблица 4 - Значения шаблонов поиска и ширина элементов
Вариант шаблона поиска | Ширина элемента в модулях (при нумерации снаружи вовнутрь) для элемента с номером | ||||
1 | 2 | 3 | 4 | 5 | |
0 | 3 | 8 | 2 | 1 | 1 |
1 | 3 | 5 | 5 | 1 | 1 |
2 | 3 | 3 | 7 | 1 | 1 |
3 | 3 | 1 | 9 | 1 | 1 |
4 | 2 | 7 | 4 | 1 | 1 |
5 | 2 | 5 | 6 | 1 | 1 |
6 | 2 | 3 | 8 | 1 | 1 |
7 | 1 | 5 | 7 | 1 | 1 |
8 | 1 | 3 | 9 | 1 | 1 |
Пары со значениями шаблона поиска (левый и правый) 8 и 0 и 0 и 8 не используют, так как значения 0 и 8 могут быть преобразованы в противоположные значения при возникновении одиночной краевой ошибки 1-Х. Оставшиеся 79 возможных пар значений шаблона поиска кодируют величину контрольной суммы по mod 79.
5.2.4.2 Вычисление контрольной суммы
Значения для двух шаблонов поиска и могут быть представлены одним из девяти возможных значений. Пары значений шаблонов поиска 0 и 8 и 8 и 0 не используют. Таким образом, остается 79 (9х9-2=79) сочетаний пар значений шаблонов поиска. Значение контрольной суммы равно остатку от деления по модулю 79 взвешенной суммы значений ширины элементов в знаке символа.
Значение контрольной суммы по модулю 79 вычисляют по формуле
,
где - произведение ширины элемента (в модулях) на весовой коэффициент этого элемента по таблице 5, расположенного в позиции М знака символа N.
_______________
N - номер знака символа (1...4), М - порядковый номер элемента в этом знаке(1...8), - ширина элемента (в модулях), - весовой коэффициент элемента.
Весовые коэффициенты вычисляют как степенную функцию с аргументом 3 по модулю 79.
_______________
Начиная с 1-го элемента 1-го знака символа для данных.
Таблица 5 - Весовые коэффициенты элементов знаков символа для вычисления значения контрольной суммы
Номер знака символа | Весовой коэффициент для элемента с номером | |||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
1 | 1 | 3 | 9 | 27 | 2 | 6 | 18 | 54 |
2 | 4 | 12 | 36 | 29 | 8 | 24 | 72 | 58 |
3 | 16 | 48 | 65 | 37 | 32 | 17 | 51 | 74 |
4 | 64 | 34 | 23 | 69 | 49 | 68 | 46 | 59 |
Кодирование двух значений шаблона поиска проводят в следующем порядке:
temp равно значению контрольной суммы;
если temp больше или равно 8, то temp = temp + 1;
если temp больше или равно 72, то temp = temp + 1;
temp div 9;
temp mod 9.
В приложении F (F.1) приведен пример вычисления контрольной суммы и выбора контрольного знака.
5.2.4.3 Декодирование шаблона поиска
Декодирование шаблона поиска начинают с его идентификации путем сравнения общей ширины четырех расположенных рядом элементов со значениями ширины крайней левой или крайней правой пар элементов. Для шаблона поиска это отношение должно находиться в пределах от 12:9,5 до 14:12,5. Левый и правый шаблоны поиска отличают по инверсии темных и светлых элементов.
Установление шаблона поиска и проверка действительных пропорций знака символа и соответствующего шаблона поиска должны быть подтверждением того, что был сканирован надлежащий сегмент символа GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный, соответствующий четверти символа.
5.2.5 Рекомендуемый алгоритм декодирования
Системы считывания штриховых кодов обеспечивают считывание настолько несовершенных символов, насколько это позволяют используемые на практике алгоритмы декодирования. В настоящем пункте приведен рекомендуемый алгоритм декодирования, используемый для расчета значения декодируемости по ISO/IEC 15416 при измерении качества печати символа.
Алгоритм включает в себя следующие этапы декодирования символа:
a) обнаружение сегмента при поиске в символе слева направо и справа налево последовательности из четырех элементов с заданным соотношением:
при сканировании слева направо:
9,5:12((элемент 1+ элемент 2):(элемент 1+ элемент 2+ элемент 3+ элемент 4))12,5:14;
при сканировании справа налево:
9,5:12((элемент 3+ элемент 4): (элемент 1+ элемент 2+ элемент 3+ элемент 4))12,5:14.
Данное соотношение определяет со второго по пятый элементы шаблона поиска.
Используя метод, изложенный в перечислении с) 1)-3), декодируют шаблон поиска для нахождения нормированных значений "от края до подобного края" (штрих плюс пробел и пробел плюс штрих) Е1 и Е2, исходя из размера , а также сумму размеров первых четырех элементов шаблона поиска. Проверяют соответствие значений Е1 и Е2 действительному шаблону поиска символов штрихового кода GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный.
Примечание - Нумерация элементов соответствует порядку их следования от внешнего края символа к его центру, таким образом, первым элементом в левом шаблоне поиска считают крайний левый элемент, а первым элементом правого шаблона поиска - крайний правый (см. рисунок 2);
b) определяют направление следования элементов и инверсию элементов "черный-белый" шаблона поиска. С помощью шаблона поиска и ориентации устанавливают, какая (n,k) структура - (16,4) или (15,4) - подходит для прилегающего к нему знака символа, а также цвет (черный или белый) начального элемента;
c) декодируют каждый прилегающий знак символа со структурой (16,4) следующим образом:
1) измеряют ширину семи размеров , , , , , и (рисунок 3).
Рисунок 3 - Измеряемые размеры при декодировании
Примечание - На рисунке 3 первый элемент изображен в виде темного элемента слева, но знаки символа могут быть также зеркальным отражением слева направо и/или инвертированы по цветам темный/светлый по отношению к рисунку.
2) преобразуют измеренные размеры , , , , и в нормированные значения , , , , и , которые представляют собой ширину в целых значениях модулей () измеренных размеров. Для значения используют следующие выражения:
если , то 2;
если , то 3;
если , то 4;
если , то 5;
если , то 6;
если , то 7;
если , то 8;
если , то 9.
Если данные условия не выполняются, знак символа считают ошибочным;
3) определяют нормированные значения ширины элементов, исходя из значений . К ширине последнего элемента знака символа относят оставшиеся модули (вместо вычисления его ширины по значениям ). Установление действительных размеров ширины элементов является единственным решением, при котором в знаке символа не должны присутствовать элементы с шириной менее одного модуля, и должен быть включен хотя бы один четный элемент с шириной один модуль. Например, на рисунке 3 значения от до равны {4 3 4 5 5 4}. Возможные производные наборы элементов могут быть рассчитаны как {4 0 3 1 4 1 3 0} (следует обратить внимание на присутствие элементов шириной 0 модулей), {3 1 2 2 3 2 2 1}, {2 2 1 3 2 3 1 2} (следует обратить внимание на отсутствие четных элементов шириной один модуль) или {1 3 0 4 1 4 0 3} (следует обратить внимание на присутствие элементов шириной 0 модулей и на отсутствие четных элементов шириной один модуль). Только восемь значений ширины элементов {3 1 2 2 3 2 2 1} удовлетворяют этим требованиям, поэтому их выбирают в качестве значений ширины элементов. Если ни один из полученных наборов элементов не является действительным, то знак считают ошибочным. В приложении G приведена реализация алгоритма декодирования ширины этих элементов на языке программирования С;
4) определяют значения четного и нечетного поднаборов с помощью программы, приведенной в приложении В;
5) вычисляют значение знака символа из значений четного и нечетного поднаборов;
6) вычисляют и сохраняют значения произведений весовых коэффициентов на значения ширины элементов для расчета контрольной суммы;
d) декодируют каждый прилегающий знак символа со структурой (15,4) следующим образом:
1) измеряют ширину семи размеров , , , , , и (рисунок 3);
2) преобразуют измеренные размеры , , , , и в нормированные значения , , , , и , которые представляют собой ширину в целых значениях модулей () этих измеренных размеров. Для -го значения используют следующие выражения:
если , то 2;
если , то 3;
если , то 4;
если , то 5;
если , то 6;
если , то 7;
если , то 8;
если , то 9.
Если данные условия не выполняются, знак символа считают ошибочным;
3) определяют значение знака символа со структурой (15,4) в соответствии с порядком, установленным в перечислениях с) 3)-6);
e) декодируют значение шаблона поиска с помощью следующего метода, использующего нормированные значения ширины элементов:
1) находят значение как сумму элементов , , и шаблона поиска;
2) преобразуют измеренные размеры , , и в нормированные значения , , и , которые представляют собой ширину в целых значениях модулей () этих измеренных размеров. Для -го значения используют следующие выражения:
если , то 2;
если , то 3;
если , то 4;
если , то 5;
если , то 6;
если , то 7;
если , то 8;
если , то 9.
3) значения для , , и шаблона поиска приведены в таблице 4;
f) после декодирования всех четырех знаков данных и двух шаблонов поиска проверяют значения обоих шаблонов поиска на принадлежность к установленному набору из 79 действительных пар значений, а также на совпадение значения контрольной суммы по модулю 79, вычисленной по двум шаблонам поиска, результатам расчета по модулю 79 суммы взвешенных значений ширины элементов (5.2.4.2) для знаков символа;
g) вычисляют значение флага сопровождения и идентификационного номера предмета по четырем знакам данных;
h) в качестве дополнительной меры проводят вторичные проверки изменения скорости сканирования, абсолютного времени сканирования, размеров символа и т.п., целесообразность которых определяют исходя из конкретного типа устройства считывания и предполагаемых условий применения.
При разработке сканеров, предназначенных для практического считывания символов GS1 DataBar, требуются средства обеспечения надежности измерений, такие как сбор избыточных данных. В приложении Н приведены дополнительные рекомендации по декодированию символов, которые следует учитывать для минимизации ошибочных считываний.
5.3 Специальные виды символов для особых применений
5.3.1 Символ GS1 DataBar Усеченный
Структура и правила кодирования символа GS1 DataBar Усеченный (рисунок 4) аналогичны символу GS1 DataBar Всенаправленный; отличием является высота символа, уменьшенная до минимального размера 13Х. Символ GS1 DataBar Усеченный может быть использован для маркировки мелких предметов торговли вместо символа GS1 DataBar Ограниченный в случае, когда требуется, чтобы разряд индикатора мог принимать более одного значения. Символ GS1 DataBar Усеченный применяют также с целью уменьшения высоты символа GS1 Композитный в случае, когда двумерный компонент состоит из четырех столбцов.
Символы GS1 DataBar Усеченный предназначены для считывания информации сканерами различного типа - считывающими карандашами, ручными (переносными) лазерными сканерами, а также линейными и двумерными сканерами изображения. Всенаправленные сканеры на кассовых терминалах в пунктах розничной торговли не позволяют осуществлять эффективное считывание указанных символов.
Рисунок 4 - Символ GS1 DataBar Усеченный, представляющий номер (01)00012345678905
Полный размер символа GS1 DataBar усеченный: длина - 96Хпри минимальной высоте 13Х.
5.3.2 Двустрочные версии символов
Определены две версии символов: с усечением по высоте и для всенаправленного считывания. Символ GS1 DataBar Двустрочный представляет собой символ GS1 DataBar Всенаправленный, в котором две половины символа размещены в двух усеченных по высоте строках. Верхняя строка соответствует левой половине символа, к которой справа добавлен шаблон-ограничитель, состоящий из штриха шириной 1Х и пробела шириной 1Х. Нижняя строка соответствует правой половине символа, к которой слева добавлен шаблон-ограничитель, состоящий из штриха шириной 1Х и пробела шириной 1Х. Символ GS1 DataBar Двустрочный Всенаправленный подобен символу GS1 DataBar Двустрочный, за исключением полноразмерной высоты строк и наличия шаблона-разделителя высотой три модуля.
5.3.2.1 Символ GS1 DataBar Двустрочный
Символ GS1 DataBar Двустрочный (рисунок 5) представляет собой двустрочную версию символа, усеченного по высоте. Для сравнения: в символе на рисунке 5 закодированы те же самые данные, что и на рисунке 4.
Рисунок 5 - Символ GS1 DataBar Двустрочный, представляющий номер (01)00012345678905
Высота верхней строки символа - 5Х, а нижней - 7Х, высота шаблона - разделителя строк между обеими строками - не менее 1Х. Полный размер символа: длина - 50Х при высоте 13Х.
Шаблон - разделитель строк начинается с левого пробела шириной один модуль. Цвет каждого из остальных модулей шаблона - разделителя строк определяют следующим образом. В случае если модули элементов верхней и нижней строки символа, прилегающие по вертикали к выбранному модулю шаблона - разделителя строк, имеют одинаковый цвет, то цвет данного модуля шаблона - разделителя строк должен быть противоположным цвету модулей вертикально прилегающих к нему элементов символа. Таким образом, модуль шаблона - разделителя строк должен быть пробелом в том случае, если модуль расположен между двумя вертикально прилегающими к нему модулями элемента символа (штрихами), и штрихом, если модуль расположен между двумя вертикально прилегающими к нему модулями элемента символа (пробелами).
В случае, если модули верхней и нижней строк символа, вертикально прилегающие к выбранному модулю шаблона - разделителя строк, имеют разные цвета, то модуль шаблона - разделителя строк должен иметь цвет, противоположный цвету модуля шаблона - разделителя строк, прилегающего к нему слева. Таким образом происходит чередование штрихов и пробелов шириной один модуль в шаблоне - разделителе строк в области с различными цветами модулей элементов верхней и нижней строк символа.
Символы GS1 DataBar Двустрочный могут быть использованы вместо символов GS1 DataBar Ограниченный для маркировки мелких предметов в том случае, когда доступное пространство слишком мало для применения символов GS1 DataBar Ограниченный. Кроме того, укороченная длина символа GS1 DataBar Двустрочный позволяет использовать больший размер X и большие возможности для качественной печати. Тем не менее использование символов GS1 DataBar Ограниченный или GS1 DataBar Усеченный более предпочтительно, чем использование символов GS1 DataBar Двустрочный, при условии, что пространство для размещения символа позволяет это сделать без уменьшения размера Х в связи с тем, что их проще сканировать считывающим карандашом или линейным сканером изображения.
Символы GS1 DataBar Двустрочный предназначены для считывания различными типами сканеров: считывающими карандашами, ручными (переносными) лазерными сканерами и двумерными сканерами изображения. Всенаправленные сканеры на кассовых терминалах в пунктах розничной торговли не позволяют осуществлять эффективное считывание указанных символов.
5.3.2.2 Символ GS1 DataBar Двустрочный Всенаправленный
Символ GS1 DataBar Двустрочный Всенаправленный (рисунок 6) представляет собой полноразмерную версию двустрочного символа GS1 DataBar, состоящего из двух строк и предназначенного для всенаправленного считывания. Строки символа отделены между собой шаблоном - разделителем строк минимальной высотой ЗХ, состоящим из трех рядов минимальной высотой 1Х.
Верхний ряд шаблона - разделителя строк содержит модули противоположного цвета по отношению к прилегающим модулям штрихов и пробелов верхней строки символа, за исключением первых четырех и последних четырех модулей шаблона - разделителя строк и 13 модулей, расположенных под элементами 1, 2 и 3 шаблона поиска. Цвет указанных 13 модулей будет светлым под прилегающими штрихами шаблона поиска и чередующимся (темным, светлым, темным и т.д.) под прилегающими пробелами шаблона поиска.
_______________
При рассмотрении слева направо.
Рисунок 6 - Символ GS1 DataBar Двустрочный Всенаправленный, представляющий номер (01)00034567890125
Средняя строка шаблона - разделителя строк состоит из чередующихся светлых и темных модулей, за исключением первых четырех и последних четырех модулей шаблона - разделителя строк.
Нижний ряд шаблона - разделителя строк содержит модули противоположного цвета по отношению к прилегающим снизу модулям штрихов и пробелов нижней строки символа, за исключением первых четырех и последних четырех модулей шаблона - разделителя строк и 13 модулей, расположенных над элементами 1, 2 и 3 шаблона поиска (в направлении справа налево). Указанные 13 модулей будут светлыми над прилегающими штрихами шаблона поиска и чередующимися (темными, светлыми, темными и т.д.) над прилегающими пробелами шаблона поиска. Единственный темный модуль среди 13 указанных модулей, прилегающих к шаблону поиска со значением 3, смещается на один модуль вправо так, чтобы он находился над штрихом шаблона поиска шириной три модуля.
_______________
При рассмотрении слева направо.
Шаблон поиска выбирают по таблице 4.
Высота каждой строки символа имеет минимальное значение 33Х, высота шаблона - разделителя строк - 3Х. Полный размер символа: длина 50Х при минимальной высоте 69Х.
Символ GS1 DataBar Двустрочный Двустрочный Всенаправленный может применяться вместо символа GS1 DataBar Двустрочный Всенаправленный в конкретных применениях с использованием всенаправленного сканирования в случае необходимости использования иных геометрических пропорций.
6 Требования к символу GS1 DataBar Ограниченный
6.1 Основные показатели
Символ GS1 DataBar Ограниченный представлен линейной символикой, позволяющей закодировать 4000000000000(4х10) числовых значений (6.2.3). В дополнение к флагу сопровождения, обеспечивающему связь с двумерным компонентом, может быть закодирован полный набор идентификационных номеров с разрядами индикатора 1 или 0.
Символы GS1 DataBar Ограниченный предназначены для считывания сканерами различного типа - считывающими карандашами, ручными (переносными) лазерными сканерами, а также линейными и двумерными сканерами изображений. Всенаправленные сканеры на кассовых терминалах в пунктах розничной торговли не позволяют осуществлять эффективное считывание указанных символов. На рисунке 7 приведен пример символа GS1 DataBar Ограниченный.
Рисунок 7 - Символ GS1 DataBar Ограниченный, представляющий номер (01)15012345678907
6.2 Структура символа
Символ GS1 DataBar Ограниченный состоит из пяти областей (порядок следования - слева направо), включающих в себя 79 модулей (рисунок 8):
a) первая область состоит из одного пробела и одного штриха шириной один модуль каждый и соответствует левому шаблону-ограничителю;
b) вторая область состоит из семи пробелов и семи штрихов общей шириной 26 модулей и соответствует левому знаку символа со структурой (n,k) = (26,7);
c) третья область состоит из семи пробелов и семи штрихов общей шириной 18 модулей и соответствует контрольному знаку со структурой (n,k) = (18,7);
d) четвертая область состоит из семи пробелов и семи штрихов общей шириной 26 модулей и соответствует правому знаку символа со структурой (n,k) = (26,7);
e) пятая область соответствует правому шаблону-ограничителю и состоит из трех элементов - пробела шириной один модуль, следующего за ним штриха шириной один модуль и следующего за ним пробела шириной пять модулей.
Рисунок 8 - Символ GS1 DataBar Ограниченный, представляющий номер (01)00312345678906 - (а), и этот же символ, напечатанный на темной подложке для демонстрации пробела шириной 5 модулей в правом шаблоне-ограничителе - (b)
Полный символ содержит 47 элементов, включающих в себя 79 модулей. В таблице Е.2 приложения Е приведены все элементы символа GS1 DataВаr Ограниченный. Высота символа GS1 DataBar Ограниченный должна быть не менее 10Х.
Однако светлые модули по краям символа GS1 DataBar Ограниченный могут выглядеть как свободные зоны. Для их отличия от свободных зон рекомендуемый алгоритм декодирования символа должен проверять шаблоны-ограничители для исключения возможности ошибочного считывания символа UPC-A в качестве символа GS1 DataВаr Ограниченный.
6.2.1 Структура знака символа
Каждый из двух знаков символа имеет структуру (n,k). Знаки символа n и k имеют значения 26 и 7 соответственно.
На рисунке 8 стрелками показано направление следования элементов в символе (слева направо).
Каждый знак символа содержит два поднабора элементов - элементы с четной и нечетной нумерацией. Понятия "с четной" и "с нечетной" нумерацией соотносятся с порядковым номером элементов в каждом поднаборе. Пробелы являются нечетными элементами, штрихи - четными. Например, поднабор с нечетной нумерацией состоит из первого, третьего, пятого, седьмого, девятого, одиннадцатого и тринадцатого элементов в каждом знаке символа, начиная с крайнего левого элемента. Поднабор из семи элементов содержит не менее семи модулей (минимальное значение) и не более 19 модулей (максимальное значение). Оба поднабора содержат нечетное число модулей. Общая сумма числа модулей в четном и нечетном поднаборах каждого знака символа равна 26.
В соответствии с алгоритмом поднаборам четных и нечетных элементов присваивают последовательные значения, кодирующие значения комбинаций размеров ширины элементов. В алгоритме заданы число элементов, число модулей, максимальная ширина элемента, а также условие присутствия в поднаборе любого элемента шириной более одного модуля.
6.2.2 Значение знака символа
Каждому значению знака символа по определенному алгоритму присваивают комбинацию размеров ширины элементов для поднаборов четных и нечетных элементов. В алгоритме заданы число элементов, число модулей, максимальная ширина элемента, а также условие присутствия в поднаборе любого элемента шириной более одного модуля. В приложении В приведен алгоритм формирования элементов знака символа GS1 DataBar Ограниченный, написанный на языке программирования С.
Действительные поднаборы четных элементов должны включать в себя хотя бы один элемент шириной один модуль. Действительные поднаборы нечетных элементов могут не иметь в своем составе ни одного элемента шириной один модуль. Указанное ограничение по ширине для четных элементов обеспечивает наличие в знаках символа уникальных сумм модулей для размера, задаваемого "от края до подобного края" (штрих плюс пробел и пробел плюс штрих).
В таблице 6 приведены характеристики поднаборов элементов знака символа со структурой (26,7), а также пар элементов из четного и нечетного поднаборов по семи группам. Оба поднабора имеют нечетное число модулей. Максимальная ширина элементов установлена таким образом, чтобы число модулей в паре смежных элементов было не более девяти. Общее число комбинаций элементов в знаке символа со структурой (26,7) равно 2013571.
Таблица 6 - Характеристики знака символа со структурой (26,7)
Диапазон значений | Группа | Сумма предыдущих групп | Отношение числа модулей в нечетном/четном поднаборах | Отношение значений самых широких элементов в нечетном/четном поднаборах, модули | Общее число комбинаций элементов нечетного поднабора | Общее число комбинаций элементов четного поднабора |
От 0 до 183063 | 1 | 0 | 17/9 | 6/3 | 6538 | 28 |
От 183064 до 820063 | 2 | 183064 | 13/13 | 5/4 | 875 | 728 |
От 820064 до 1000775 | 3 | 820064 | 9/17 | 3/6 | 28 | 6454 |
От 1000776 до 1491020 | 4 | 1000776 | 15/11 | 5/4 | 2415 | 203 |
От 1491021 до 1979844 | 5 | 1491021 | 11/15 | 4/5 | 203 | 2408 |
От 1979845 до 1996938 | 6 | 1979845 | 19/7 | 8/1 | 17094 | 1 |
От 1996939 до 2013570 | 7 | 1996939 | 7/19 | 1/8 | 1 | 16632 |
Значение знака символа вычисляют по следующей формуле
,
где - общее число комбинаций элементов четного поднабора;
- значение для нечетного поднабора;
- значение для четного поднабора;
- сумма произведений значений для каждой предыдущей группы.
Значения и вычисляют с использованием значения знака символа по формулам:
;
.
Например, необходимо закодировать знак символа со значением 917879. По таблице 6 определяют, что значение знака символа находится в диапазоне значений группы 3 и соответствует 820064 и 6454. Применяя приведенные выше уравнения, определяют:
;
.
Используя алгоритм, приведенный в приложении В, определяют ширину нечетных и четных элементов. Знак символа из группы 3 (таблица 6) включает в себя нечетный поднабор элементов общей шириной 9 модулей и соответствующим значением 15 из 28 возможных значений (в диапазоне от 0 до 27) и четного поднабора элементов общей шириной 17 модулей и соответствующим значением 1005 из 6454 возможных значений (в диапазоне от 0 до 6453). Ширина нечетных элементов соответствует {1 2 1 1 1 1 2} модулям, а ширина четных элементов - {1 2 3 5 1 2 3} модулям. Таким образом, ширина элементов знака символа для данных составляет {1 1 2 2 1 3 1 5 1 1 1 2 2 3} модулей в направлении слева направо.
6.2.3 Значение символа
Значение символа вычисляют путем комбинации значений левого и правого знаков символа по следующей формуле
,
где - значение символа;
и - значения левого и правого знаков символа соответственно.
Кодирование значений правого и левого знаков символа ( и соответственно) исходя из значения , проводят с помощью следующих формул:
;
.
Путем комбинации значений знаков символа можно получить 4054468172041 значений, однако применяют только первые 4000000000000 значений (от 0 до 1999999999999 и от 2015133531096 до 4015133531095). Указанные диапазоны значений выбирают таким образом, чтобы наличие двумерного компонента можно было определить по числу модулей каждого поднабора левого знака символа без декодирования правого знака символа. У отдельного линейного символа GS1 DataBar Ограниченный значения левого знака символа находятся в диапазоне от 0 до 993260, в то время как символ GS1 DataBar Ограниченный в составе символа GS1 Композитный имеет значения левого знака символа в диапазоне от 1000776 до 1994036.
Если значения знака символа попадают во второй диапазон (от 2015133531096 и выше), это указывает на наличие флага сопровождения и двумерного компонента, сопровождающего символ GS1 DataBar Ограниченный. В этом случае значение основных данных вычисляют путем вычитания значения 2015133531096 из значения символа GS1 DataBar Ограниченный. Разность должна быть в интервале значений от 0 до 1999999999999, что соответствует первому диапазону значений, и, таким образом, определяют основную идентификацию предмета торговли.
Значения от 0 до 1999999999999 соответствуют первым 13 разрядам номера GTIN-14 основного идентификатора предмета. Разряд индикатора принимает два возможных цифровых значения - ноль и единицу. Для формирования идентификационного номера GTIN-14 к окончанию данных, подлежащих передаче, добавляют вычисляемую по модулю 10 контрольную цифру. Начальный префикс идентификатора применения (01) добавляют к передаваемым данным непосредственно после подлежащего обязательной передаче идентификатора символики ]е0 или ]С1.
6.2.4 Контрольный знак символа
Символ GS1 DataBar Ограниченный имеет контрольный знак символа (далее - контрольный знак), который одновременно выполняет функции шаблона поиска символа. Контрольный знак расположен между двумя знаками символа.
6.2.4.1 Структура контрольного знака
Контрольный знак со структурой (18,7) кодирует 89 значений - от 0 до 88. Контрольный знак состоит из 7 пробелов общей шириной 9 модулей и 7 штрихов общей шириной 9 модулей. Комбинации элементов контрольного знака выбирают таким образом, чтобы исключить возможность дублирования при смещении и/или зеркальном отображении слева направо комбинаций 14 элементов, присутствующих в зоне непосредственной близости к середине символа. В приложении С приведена ширина элементов контрольного знака для 89 закодированных значений.
6.2.4.2 Вычисление значения контрольного знака
Значение контрольного знака равно остатку от деления по модулю 89 взвешенной суммы значений ширины элементов знаков символа.
Значение контрольного знака по модулю 89 вычисляют по формуле
,
где - произведение весового коэффициента знака символа N для позиции элемента с порядковым номером М на значение ширины данного элемента М (в модулях) в знаке символа N (таблица 7).
_______________
- ширина элемента, - весовой коэффициент элемента.
Весовые коэффициенты вычисляют как степенную функцию с аргументом 3 по модулю 89.
_______________
Начиная с первого элемента первого знака символа для данных.
Таблица 7 - Весовые коэффициенты элементов знаков символа для вычисления значения контрольного знака по модулю 89
Номер знака символа | Becoвой коэффициент элемента с номером (при нумерации слева направо) | |||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
1 | 1 | 3 | 9 | 27 | 81 | 65 | 17 | 51 | 64 | 14 | 42 | 37 | 22 | 66 |
2 | 20 | 60 | 2 | 6 | 18 | 54 | 73 | 41 | 34 | 13 | 39 | 28 | 84 | 74 |
В приложении F (F.2) приведен пример кодирования символа GS1 DataBar Ограниченный.
6.2.5 Шаблон поиска
Шаблон поиска характеризуется отношением ширины знаков символа к ширине контрольного знака символа, которое определяется через номинальное отношение 26:18:26 ширины 14 элементов контрольного знака символа к 14 элементам каждого из двух прилегающих знаков символа. Кроме того, символ идентифицируют по контрольному знаку символа, соответствующему действительным комбинациям пробелов и штрихов контрольного знака символа. Возможность зеркального отображения или смещения комбинаций элементов контрольного знака символа, которая может возникнуть в реальных символах, устранена путем удаления соответствующих сочетаний из набора контрольных знаков.
6.2.6 Рекомендуемый алгоритм декодирования
Системы считывания штриховых кодов обеспечивают считывание настолько несовершенных символов, насколько это позволяют используемые на практике алгоритмы декодирования. В настоящем разделе приведен рекомендуемый алгоритм декодирования, используемый для расчета значения декодируемости по ISO/IEC 15416 при измерении качества печати символа.
Алгоритм включает в себя следующие этапы декодирования каждого знака символа:
а) осуществляют обнаружение символа путем поиска трех последовательностей, состоящих из четырнадцати элементов, с отношением значений ширины в соотношении (26±1,5):18:(26±1,5) (дополнительно с учетом допуска на изменение скорости сканирования, если это требуется для данного сканирующего устройства);
b) получают подтверждение, что центральная последовательность является действительным контрольным знаком. Используя метод, изложенный в этапах с) 1) и с) 2) (за исключением того, что на этапе, указанном в перечислении с) 2), значение делителя равно 18, а не 26), определяют значения ширины элементов. Сравнивают полученные результаты со значениями, приведенными в приложении С;
c) проводят декодирование двух знаков символа следующим образом:
1) измеряют тринадцать параметров , , , , , , , , , , , и (рисунок 9);
Рисунок 9 - Измеряемые параметры при декодировании
2) преобразуют измеренные размеры , , , , , , , , , , и в нормированные значения , , , , , , , , , , и которые представляют собой ширину указанных измеренных размеров () в целых значениях модуля. Для определения используют следующие выражения:
если , то 2;
если , то 3;
если , то 4;
если , то 5;
если , то 6;
если , то 7;
если , то 8;
если , то 9.
Если данные условия не выполняются, контрольный знак символа считают ошибочным;
3) определяют нормированные значения ширины элементов величин . К ширине последнего элемента знака символа относят оставшиеся модули (вместо вычисления его ширины на основе значений ). Набор действительных значений ширины элементов является единственным решением, при котором отсутствуют элементы шириной менее одного модуля и присутствует хотя бы один четный элемент шириной один модуль. Например, на рисунке 9 значениям от до соответствуют {3 3 4 6 6 4 3 3 5 4 2 3}. Возможными производными наборами элементов являются {1 2 1 3 3 3 1 2 1 4 0 2 1 2}, {2 1 2 2 4 2 2 1 2 3 1 1 2 1} или {3 0 3 1 5 1 3 0 3 2 2 0 3 0}. Только четырнадцать значений ширины элементов {2 1 2 2 4 2 2 1 2 3 1 1 2 1} удовлетворяют требованиям к действительной ширине элементов, поэтому их выбирают в качестве значений ширины элементов. Если ни один из полученных наборов значений ширины элементов не является действительным, знак считают ошибочным. В приложении G приведена реализация алгоритма декодирования ширины этих элементов на языке программирования С;
4) определяют значения четного и нечетного поднаборов с помощью программы, приведенной в приложении В;
d) после декодирования двух знаков символа и контрольного знака символа проводят проверку на совпадение значений контрольного знака, вычисленных на основе шаблона поиска по модулю 89, результатам расчета по модулю 89 суммы взвешенных значений ширины элементов для знаков символа;
e) вычисляют значение флага сопровождения и идентификационного номера предмета по значениям двух знаков символа;
f) в качестве дополнительной меры проводят вторичные проверки изменения скорости сканирования, абсолютного времени сканирования, размеров символа и т.п., целесообразность которых определяют исходя из конкретного типа устройства считывания и предполагаемых условий применения;
g) подтверждают, что выполняются все нижеперечисленные условия:
1) расстояние от начала символа (т.е. от левого края крайнего левого пробела шаблона-ограничителя) до правого края первого штриха (т.е. второго элемента шаблона-ограничителя) более (3/52) первого знака символа (т.е. больше 1,5 модулей);
2) расстояние от начального края штриха шаблона-ограничителя до начального края первого штриха левого знака символа должно соответствовать модулей, где соответствует нормированному значению первого пробела, определенному в 6.2.6 на этапе с) 3) (т.е. номинальная ширина штриха шаблона-ограничителя соответствует одному модулю);
3) в случае обнаружения последовательности, состоящей не менее чем из 10 элементов, предшествующих и включающих в себя первый штрих (с порядком нумерации, при котором номер 10 присвоен наиболее удаленному штриху слева, а номер 1 - первому штриху), элементы с первого по восьмой включительно не должны декодироваться в качестве двух действительных знаков символа UPC-A (в соответствии c ISO/lEC 15420) с номинальным размером X, составляющим 25% значения (1/26) (т.е. 0,25 номинального размера модуля левого знака символа GS1 DataBar Ограниченный).
Если какое-либо из условий 1)-3) не выполняется, то сканирование символа GS1 DataBar Ограниченный должно быть забраковано;
h) подтверждают, что расстояние от левого края правого шаблона-ограничителя до правого края штриха этого шаблона-ограничителя равно значению (1/13) правого знака символа (±0,5 модулей), а также, что расстояние от левого края конечного штриха шаблона-ограничителя до окончания символа (т.е. до завершения конечного пробела) более (5/26) (т.е. 5 модулей).
Примечание - Для предотвращения ошибочного считывания символов UPC-A в качестве символов GS1 DataBar Ограниченный сканер должен выполнять этапы декодирования, соответствующие указанным выше этапам g) и h). Дополнительные пояснения приведены в приложении Н.5.
При разработке сканеров, предназначенных для практического считывания символов GS1 DataBar, требуется обеспечение надежности измерений, такое как сбор избыточных данных. В приложении Н приведены дополнительные рекомендации по декодированию символов, которые следует учитывать для минимизации ошибочных считываний.
7 Требования к символам GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный
7.1 Основные показатели символа GS1 DataBar Расширенный
Символ GS1 DataBar Расширенный представлен линейной символикой с символами переменной длины, способной закодировать до 74 цифровых или 41 алфавитного знака данных - строк элементов с идентификаторами применения AI, с внутренним представлением в виде двоичного числа. Символы GS1 DataBar Расширенный могут быть использованы для кодирования основных и дополнительных данных, предназначенных для использования на кассовых терминалах в пунктах розничной торговли, а также для иных применений при наличии соответствующих сканеров и соответствующим образом настроенного прикладного программного обеспечения.
Символы GS1 DataBar Расширенный могут быть сканированы и декодированы по 22 сегментам с последующим восстановлением полного символа, что обеспечивает возможность всенаправленного сканирования. Пример символа GS1 DataBar Расширенный приведен на рисунке 10.
Рисунок 10 - Символ GS1 DataBar Расширенный, представляющий номер (01)98898765432106(3202)012345(15)991231
7.2 Структура символа
7.2.1 Общая структура символа
Первый знак символа в любом символе является контрольным знаком, в котором закодированы контрольная сумма и длина символа. Пример символа GS1 DataBar Расширенный, приведенный на рисунке 11, содержит один контрольный знак символа и пять знаков символа.
Символы GS1 DataBar Расширенный построены в виде последовательности триплетов, состоящих из шаблона поиска, расположенного между двумя знаками символа. При нечетном числе знаков символа (при порядке следования слева направо) шаблон поиска размещают за последним знаком символа. Порядок следования элементов в знаках символа с нечетной нумерацией - слева направо, в знаках символа с четной нумерацией - справа налево. В знаках символа 1, 2, 5, 6, 9, 10 и т.д. первым элементом (самым дальним элементом от прилегающего шаблона поиска) является пробел, в то время как в знаках символа 3, 4, 7, 8, 11, 12 и т.д. первым элементом является штрих. Символ GS1 DataBar Расширенный всегда начинается и заканчивается левым и правым шаблонами-ограничителями, так же как и каждая строка многострочного символа. Пример символа GS1 DataBar Расширенный, состоящего из шести знаков символа и одиннадцати областей (слева направо), имеет следующую структуру (рисунок 11):
_______________
При подсчете числа знаков символа для данных контрольный знак символа условно считают знаком символа для данных. Поэтому для данной записи знаком символа с номером 1 является контрольный знак символа, знаком символа с номером 2 - первый знак символа (рисунок 11) и т.д.
a) первая область состоит из одного пробела и одного штриха шириной один модуль каждый и соответствует левому шаблону-ограничителю;
b) вторая область состоит из четырех пробелов и четырех штрихов общей шириной 17 модулей и соответствует контрольному знаку символа со структурой (n,k) = (17,4);
c) третья область состоит из трех пробелов и двух штрихов общей шириной 15 модулей и соответствует шаблону поиска А1;
d) четвертая область состоит из четырех штрихов и четырех пробелов общей шириной 17 модулей и соответствует первому знаку символа со структурой (n,k) = (17,4) (порядок следования элементов - справа налево);
e) пятая область состоит из четырех штрихов и четырех пробелов общей шириной 17 модулей и соответствует второму знаку символа со структурой (n,k) = (17,4);
f) шестая область состоит из трех штрихов и двух пробелов общей шириной 15 модулей и соответствует шаблону поиска В2;
g) седьмая область состоит из четырех пробелов и четырех штрихов общей шириной 17 модулей и соответствует третьему знаку символа со структурой (n,k) = (17,4) (порядок следования элементов - справа налево);
h) восьмая область состоит из четырех пробелов и четырех штрихов общей шириной 17 модулей и соответствует четвертому знаку символа со структурой (n,k) = (17,4);
i) девятая область состоит из трех пробелов и двух штрихов общей шириной 15 модулей и соответствует шаблону поиска В1;
j) десятая область состоит из четырех штрихов и четырех пробелов общей шириной 17 модулей и соответствует пятому знаку символа со структурой (n,k) = (17,4) (порядок следования элементов - справа налево);
k) одиннадцатая область состоит из одного пробела и одного штриха шириной один модуль каждый и соответствует правому шаблону-ограничителю.
Примечание - Порядок следования элементов знака символа определяют по направлению к прилегающему к нему шаблону поиска.
Символ GS1 DataBar Расширенный (рисунок 11) состоит из 67 элементов, общая ширина которых равна 151 модулю. В таблице Е.3 приложения Е приведены все 67 элементов символа GS1 DataBar Расширенный, указанного на рисунке 11. Наименьшая высота символа GS1 DataBar Расширенный должна быть равна 34 модулям.
Символ не требует наличия свободных зон. Ширина первого и последнего элементов символа может быть более одного модуля при совпадении по цвету смежной с ними области подложки (светлой слева или темной справа), что не оказывает влияния на считывание символа.
. |
Рисунок 11 - Символ GS1 DataBar Расширенный, представляющий номер (01)90012345678908(3103)001750
7.2.2 Структура знака символа
Каждый знак символа для данных (далее - знак символа) и контрольный знак символа имеют структуру (n,k). Значение n равно 17, а значение k - 4.
Порядок следования элементов первого, третьего и прочих знаков символов с нечетной нумерацией - слева направо, а второго, четвертого и прочих знаков символов с четной нумерацией - справа налево, так что элементы знака символа всегда следуют по направлению к прилегающему к ним шаблону поиска. На рисунке 11 стрелками показано направление следования элементов в каждом знаке символа.
Каждый знак символа содержит два поднабора элементов - с четной и нечетной нумерацией. Понятия "с четной" и "с нечетной" нумерацией относятся к порядковому номеру элементов в каждом поднаборе. Например, поднабор с нечетной нумерацией состоит из первого, третьего, пятого и седьмого элементов в каждом знаке символа, начиная с наиболее удаленного элемента от прилегающего к этому знаку шаблона поиска. Нечетные элементы расположены дальше от прилегающего к знаку символа шаблона поиска, при этом восьмой по порядку (четный) элемент прилегает к шаблону поиска.
7.2.3 Значение знака символа
Каждому значению знака символа по определенному алгоритму присваивают комбинацию значений ширины элементов для четного и нечетного поднаборов. В этом алгоритме задают число элементов, число модулей, максимальную ширину элемента, а также возможность присутствия в поднаборе любого элемента шириной более одного модуля. В приложении В приведен алгоритм формирования элементов знака символа GS1 DataBar Расширенный, написанный на языке программирования С.
Действительные поднаборы нечетных элементов должны включать в себя хотя бы один элемент шириной один модуль. Действительные поднаборы четных элементов могут не содержать ни одного элемента шириной один модуль. Указанное ограничение по ширине для нечетных элементов обеспечивает наличие в знаках символа уникальных сумм модулей для размера, задаваемого "от края до подобного края" (штрих плюс пробел и пробел плюс штрих).
Кроме того, существует дополнительное ограничение, заключающееся в том, что первый (наиболее удаленный от шаблона поиска) нечетный элемент должен быть шириной менее пяти модулей. Данное ограничение обеспечивает отсутствие появления ложного шаблона поиска при захвате элементов прилегающих к нему знаков символа.
В таблице 8 приведены характеристики поднаборов элементов для знака символа со структурой (17,4), а также пары элементов из четного и нечетного поднаборов, объединенные в пять групп. В нечетном поднаборе - четное число модулей, в четном поднаборе - нечетное число модулей. Максимальная ширина элементов установлена таким образом, чтобы число модулей в паре смежных элементов было не более девяти модулей. Общее число комбинаций элементов в знаке символа со структурой (17,4) равно 4192.
Таблица 8 - Характеристики знака символа со структурой (17,4)
Диапазон значений | Группа | Сумма предыдущих групп | Соотношение числа модулей в нечетных/четных поднаборах | Соотношение значений самых широких элементов в нечетных/четных поднаборах, модули | Общее число комбинаций элементов нечетного поднабора | Общее число комбинаций элементов четного поднабора |
От 0 до 347 | 1 | 0 | 12/5 | 7/2 | 87 | 4 |
От 348 до 1387 | 2 | 348 | 10/7 | 5/4 | 52 | 20 |
От 1388 до 2947 | 3 | 1388 | 8/9 | 4/5 | 30 | 52 |
От 2948 до 3987 | 4 | 2948 | 6/11 | 3/6 | 10 | 104 |
От 3988 до 4191 | 5 | 3988 | 4/13 | 1/8 | 1 | 204 |
Значение знака символа вычисляют по следующей формуле
,
где - общее число комбинаций элементов четного поднабора;
- значение для нечетного поднабора;
- значение для четного поднабора;
- сумма произведений значений для каждой предыдущей группы.
Для кодирования конкретного значения знака символа вычисляют и по следующим формулам:
;
.
Например, необходимо закодировать знак символа со значением 3544. С помощью таблицы 8 определяют, что значение знака символа находится в диапазоне, соответствующем группе 4, где 2948, a 104. С помощью приведенных выше уравнений определяют:
;
.
Для вычисления ширины элементов используют алгоритм, приведенный в приложении В. Знаку символа, значение которого находится в группе 4, соответствует согласно таблице 8 нечетный поднабор элементов общей шириной 6 модулей и значением 5 из 10 возможных значений (в диапазоне от 0 до 9) и четный поднабор элементов общей шириной 11 модулей и значением 76 из 104 возможных значений (в диапазоне от 0 до 103). Значения ширины нечетных элементов соответственно будут равны {1 3 1 1} модулям, а значения ширины четных элементов соответственно - {4 1 4 2} модулям. Таким образом, ширина элементов знака символа будет равна {1 4 3 1 1 4 1 2} модулям.
7.2.4 Двоичное значение символа
Каждое значение знака символа от 0 до 4095 представляет 12-битовый номер, используемый для кодирования значения символа. Двоичные значения каждого знака символа последовательно соединяют для формирования кодированной двоичной строки. Первый знак символа (второй знак символа) содержит старший бит.
Длины двоичной строки в зависимости от числа знаков символа приведены в таблице 9.
Таблица 9 - Число битов в зависимости от размера символа
Число знаков символа | Число знаков символа для данных | Число битов в кодированной строке | Число знаков символа | Число знаков символа для данных | Число битов в кодированной строке |
4 | 3 | 36 | 14 | 13 | 156 |
5 | 4 | 48 | 15 | 14 | 168 |
6 | 5 | 60 | 16 | 15 | 180 |
7 | 6 | 72 | 17 | 16 | 192 |
8 | 7 | 84 | 18 | 17 | 204 |
9 | 8 | 96 | 19 | 18 | 216 |
10 | 9 | 108 | 20 | 19 | 228 |
11 | 10 | 120 | 21 | 20 | 240 |
12 | 11 | 132 | 22 | 21 | 252 |
13 | 12 | 144 |
7.2.5 Кодирование данных
Данные пользователя, подлежащие кодированию в символе GS1 DataBar Расширенный, должны включать в себя идентификаторы применения и поля данных, которые соответствуют требованиям общих спецификаций GS1 к данным, структурированным так же, как они должны быть закодированы в символе GS1-128. При кодировании символа GS1 DataBar Расширенный должны соблюдаться правила соединения строк элементов с идентификаторами применения AI для символов GS1-128, например, использования знака FNC1 для отделения строки элементов переменной длины от следующей за ней строки элементов.
Двоичная строка GS1 DataBar Расширенный может быть разделена на несколько (до пяти) двоичных полей. Первые два поля используют во всех символах. Дополнительно может быть использовано от одного до трех оставшихся полей. Указанные поля включают в себя:
a) поле флага сопровождения двумерным компонентом (7.2.5.1);
b) поле метода кодирования (7.2.5.2);
c) двоичное поле символа переменной длины (7.2.5.3);
d) поле уплотненных данных (7.2.5.4);
e) поле универсального уплотнения данных (7.2.5.5).
Двоичные поля последовательно соединяют и кодируют в строке двоичных данных символа. Поле метода кодирования всегда кодируют после поля флага сопровождения двумерным компонентом. При применении методов кодирования строк данных фиксированной длины уплотненные данные полностью заполняют заданную двоичную строку. В методах кодирования строк данных переменной длины кодирование завершают необязательным полем универсального уплотнения данных, за которым следуют биты-заполнители по числу неиспользованных битов в двоичной строке, соответствующей символу требуемого размера.
Далее в тексте настоящего стандарта значения в двоичных полях будут представлены заключенными в двойные кавычки двоичными значениями.
7.2.5.1 Поле флага сопровождения двумерным компонентом
В данном поле должен быть один бит, указывающий, является ли символ GS1 DataBar Расширенный частью символа GS1 Композитный. Значение данного бита, равное нулю, указывает на обособленный линейный символ GS1 DataBar Расширенный, а значение, равное единице, - на его использование в качестве линейного компонента символа GS1 Композитный.
7.2.5.2 Поле метода кодирования
Поле метода кодирования содержит один или более битов. Данное поле кодируется непосредственно за флагом сопровождения двумерным компонентом. Значение поля определяет, является ли символ универсальным символом или символом, ориентированным на особое применение, который начинается полем уплотненных данных (например, для эффективного отображения строки элементов с идентификатором применения AI для идентификации предмета). Значения поля метода кодирования установлены в таблице 10.
Таблица 10 - Методы и параметры кодирования
Значение поля метода кодирования | Число знаков символа | Длина поля уплотненных данных, биты | Наличие поля универсального уплотнения данных | Идентификаторы применения AI в строках элементов |
1 | От 5 до 22 | 44 | Да | (01) и прочие AI |
00 | От 4 до 22 | Не регламентируется | Да | Любые AI |
0100 | 6 (фиксированная длина) | 55 | Нет | (01) и (3103) |
0101 | 6 (фиксированная длина) | 55 | Нет | (01) и (3202)/(3203) |
01100 | От 6 до 22 | 42 | Да | (01) и (392х) |
01101 | От 7 до 22 | 52 | Да | (01) и (393х) |
0111000 | 8 (фиксированная длина) | 76 | Нет | (01), (310х) и (11) |
0111001 | 8 (фиксированная длина) | 76 | Нет | (01), (320х) и (11) |
0111010 | 8 (фиксированная длина) | 76 | Нет | (01), (310х) и (13) |
0111011 | 8 (фиксированная длина) | 76 | Нет | (01), (320х) и (13) |
0111100 | 8 (фиксированная длина) | 76 | Нет | (01), (310х) и (15) |
0111101 | 8 (фиксированная длина) | 76 | Нет | (01), (320х) и (15) |
0111110 | 8 (фиксированная длина) | 76 | Нет | (01), (310х) и (17) |
0111111 | 8 (фиксированная длина) | 76 | Нет | (01), (320х) и (17) |
_______________
В зависимости от идентификатора применения AI.
Поле метода кодирования со значением "1" предназначено для кодирования данных, связанных с основной идентификацией, с идентификатором применения AI (01), и дополнительных данных с иными идентификаторами применения AI.
Поле метода кодирования со значением "00" предназначено для кодирования данных о предметах, для которых не применима основная идентификация AI (01). Данное значение устанавливает, что будет закодирован символ переменной длины, состоящий из четырех или более знаков символа. В составе символа присутствует поле универсального уплотнения данных, но отсутствует поле уплотненных данных.
Поля метода кодирования со значениями "0100" и "0101" предназначены для кодирования основной идентификации предметов и значения их массы переменной величины. Поля метода кодирования со значениями от "0111000" до "0111111" предназначены для кодирования основной идентификации предмета, значения массы и одного из четырех полей данных с иными идентификаторами применения AI.
Поля метода кодирования со значениями "01100" и "01101" предназначены для кодирования основной идентификации предмета и его цены.
7.2.5.3 Двоичное поле символа переменной длины
Данное поле присутствует только в символах переменной длины с полями метода кодирования со значениями "1", "00", "01100" и "01101" и расположено непосредственно за полем метода кодирования. Длина поля - два бита. Первый бит имеет значение "ноль" в том случае, если символ содержит четное число знаков символа, и значение "единица", если содержит нечетное число знаков символа. Второй бит является битом размера группы и принимает значение "ноль" в том случае, если число знаков символа в символе менее или равно 14, и значение "единица", если число знаков символа более 14. Эти два бита вместе с набором шаблонов поиска обеспечивают двойную проверку числа знаков символа, установленного в контрольном знаке символа (7.2.6).
7.2.5.4 Поле уплотненных данных
Двоичные данные в этом поле интерпретируются в соответствии с конкретным методом кодирования. Все символы, кроме тех, для которых в поле метода кодирования установлено значение "00", содержат поле уплотненных данных.
7.2.5.4.1 Поле метода кодирования со значением "1" для данных основной идентификации предмета
Данный метод кодирования может быть использован в случае, если в начале сообщения, подлежащего кодированию, присутствует строка элемента с идентификатором применения AI (01). В строке элемента с идентификатором применения AI для идентификации предмета отбрасывают двухразрядный идентификатор (01) и контрольную цифру. Остальные 13 цифр кодируют в 44-битовом поле уплотненных данных в пяти группах, включающих в себя одну, три, три, три и три цифры, кодируемых в четырех, десяти, десяти, десяти и десяти битах соответственно. Каждую группу кодируют простым преобразованием из десятичного в двоичный формат. Дополнительные вспомогательные данные с иными идентификаторами применения AI кодируют в поле универсального уплотнения данных непосредственно после 44-битового поля уплотненных данных.
Устройство декодирования восстанавливает данные поля уплотненных данных, преобразуя 44 бита в пяти группах по четыре, десять, десять, десять и десять битов соответственно в 13 цифр, и добавляет две цифры: 01 - в качестве префикса и контрольную цифру, вычисленную по модулю 10, в конец строки элементов с AI. Оставшуюся часть двоичной строки декодируют с использованием универсального уплотнения данных.
Например, если при кодировании сообщения (01)00012345678905(10)АВС123 использован метод "1", то в поле уплотненных данных в действительности включают только цифры, выделенные полужирным шрифтом. Номер партии АВС123 и идентификатор применения AI (10) кодируют в поле универсального уплотнения данных непосредственно после 44-битового поля уплотненных данных. На выходе устройства декодирования будет последовательность данных "]е0010001234567890510АВС123".
_______________
Идентификатор применения AI (10) обозначает номер партии или лота.
Метод кодирования со значением "1" установлен для символов переменной длины, содержащих пять и более знаков символа, включая поле универсального уплотнения данных.
7.2.5.4.2 Поле метода кодирования со значением "0100" для идентификации предмета переменной массы (с точностью задания массы 0,001 кг)
Данный метод кодирования может быть использован в случае, если подлежащее кодированию сообщение состоит только из двух строк элементов AI: строки с идентификатором применения AI (01), за которой следует строка с идентификатором применения AI (3103). Строка элемента AI (01) для идентификации предмета должна иметь значение разряда индикатора, равное 9. В строке элементов с идентификатором применения AI (3103) для переменной массы предмета должна быть указана его масса, которая должна быть не более 32,767 кг. Две строки элементов с AI уплотняют до 40 и 15 битов соответственно, образуя общее поле длиной 55 битов. С помощью метода кодирования со значением "0100" кодируют символ фиксированной длины, состоящий из шести знаков символа без поля универсального уплотнения данных.
_______________
Идентификатор применения AI (3103) обозначает массу нетто в килограммах с тремя десятичными разрядами после запятой.
При кодировании двух строк элементов с идентификатором применения AI в строке элемента с AI (01) отбрасывают первые три цифры (019) и последнюю контрольную цифру. Остальные 12 цифр кодируют в 40-битовом поле уплотненных данных в четырех группах по три цифры в каждой, кодируемых соответственно в 10 битах. В строке элемента с AI (3103) отбрасывают первые четыре цифры (3103). Остальные шесть цифр в диапазоне от 000000 до 032767 кодируют в 15 битах и добавляют в поле уплотненных данных.
Устройство декодирования декодирует первые 40 битов как 12 цифр путем преобразования каждой из четырех групп по 10 битов в три цифры и добавляет перед этими 12 цифрами префикс из трех цифр - 019, а в конец первой строки элемента с AI - контрольную цифру, вычисленную по основанию 10. Далее указанное устройство преобразует остальные 15 битов в десятичное числовое значение, дополняя полученные цифры начальными нулями до шести цифр, затем добавляет префикс AI, равный 3103, к декодированному шестизначному значению массы для формирования второй строки элемента c AI в сообщении.
Например, если при кодировании сообщения (01)90012345678908(3103)001750 использован метод кодирования со значением "0100", то в поле уплотненных данных в действительности включают только выделенные полужирным шрифтом цифры, но на выходе устройства декодирования будет последовательность данных "]е001900123456789083103001750".
7.2.5.4.3 Поле метода кодирования со значением "0101" для идентификации предмета переменной массы (с точностью задания значения массы 0,001 или 0,01 фунта)
Указанный метод кодирования может быть использован в случае, если подлежащее кодированию сообщение состоит только из двух строк элементов с AI: строки с AI (01), за которой следует строка с AI (3202) или AI (3203). Строка элемента с AI (01) для идентификации предмета должна иметь значение разряда индикатора, равное 9. В строке элемента с AI (3202) для переменного значения массы предмета должна быть указана его масса, которая должна быть не более 99,99 фунтов. В строке элемента с AI (3203) для переменного значения массы должна быть указана его масса, но не более 22,767 фунтов. Две строки элементов с AI уплотняют до 40 и 15 битов соответственно, образуя общее поле длиной 55 битов. С помощью метода кодирования со значением "0101" кодируют символ фиксированной длины, состоящий из шести знаков символа без поля универсального уплотнения данных.
_______________
Идентификатор применения AI (3202) обозначает массу нетто в фунтах с двумя десятичными разрядами после запятой, идентификатор применения AI (3203) обозначает массу нетто в фунтах с тремя десятичными разрядами после запятой.
При кодировании двух строк элементов с идентификатором применения AI в строке элемента с AI (01) отбрасывают первые три цифры (019) и последнюю контрольную цифру. Остальные 12 цифр кодируют в 40-битовом поле уплотненных данных в четырех группах по три цифры в каждой группе, кодируемых соответственно в 10 битах. В строках элементов с AI (3202) и AI (3203) отбрасывают первые четыре цифры (3202 и 3203 соответственно). Для AI (3202) значения для оставшихся 6 цифр в диапазоне от 0 до 9 999 кодируют 15 битами и добавляют в поле уплотненных данных. Для AI (3203) значения для оставшихся 6 цифр должны находиться в диапазоне от 0 до 22767. К этому значению прибавляют 10000, результат кодируют в 15 битах и добавляют в поле уплотненных данных.
Устройство декодирования декодирует первые 40 битов как 12 цифр путем преобразования каждой из четырех групп по 10 битов в три цифры, затем добавляет перед этими 12 цифрами префикс, состоящий из трех цифр - 019, а в конце первой строки элемента с AI - контрольную цифру, вычисленную по модулю 10. Затем устройство декодирования преобразует оставшиеся 15 битов в десятичное числовое значение. В случае если это значение менее 10000, то оно будет преобразовано в шесть цифр, которым предшествует идентификатор применения AI, равный (3202), с целью создания строки элемента с AI в сообщении. В случае если значение более 10000, из него следует вычесть 10000, дополняя полученные цифры начальными нулями до шести цифр. Затем устройство декодирования добавляет префикс идентификатора применения AI (3203) к декодированному шестиразрядному значению массы для формирования второй строки элемента с AI в сообщении.
Например, если при кодировании сообщения (01)90012345678908(3202)000156 использован метод кодирования со значением "0101", в поле уплотненных данных в действительности включают только выделенные полужирным шрифтом цифры, но на выходе устройства декодирования будет последовательность данных "]е001900123456789083202000156".
7.2.5.4.4 Поля методов кодирования со значениями от "0111000" до "0111111" для идентификации предмета, его переменной массы и календарной даты
Указанный метод кодирования может быть использован в случае, если подлежащее кодированию сообщение состоит из двух или трех строк элементов с идентификаторами применения AI: AI (01), AI (310х) или AI (320х) (х - в диапазоне от 0 до 9) в качестве необязательного дополнения AI (11), или AI (13), или AI (15), или AI (17). Строка элемента с AI (01) для идентификации предмета должна иметь значение индикатора, равное 9. В строке элемента с AI для переменной массы могут быть указаны числовые значения в диапазоне от 0 до 99999. С помощью методов кодирования со значениями от "0111000" до "0111111" кодируют символ фиксированной длины, состоящий из восьми знаков символа без поля универсального уплотнения данных.
Ниже приведены восемь методов кодирования данных, связанных с предметом, его переменной массой и календарной датой.
Метод "0111000" | Аl (01) + Аl (310х) + Аl (11) | Масса нетто предмета в метрических единицах величин и дата изготовления |
Метод "0111001" | Аl (01) + Аl (320х) + Аl (11) | Масса нетто предмета в неметрических (британских) единицах величин и дата изготовления |
Метод "0111010" | AI (01) + AI (310х) + AI (13) | Масса нетто предмета в метрических единицах величин и дата упаковывания |
Метод "0111011" | Аl (01) + Аl (320х) + Аl (13) | Масса нетто предмета в неметрических (британских) единицах величин и дата упаковывания |
Метод "0111100" | AI (01) + AI (310х) + AI (15) | Масса нетто предмета в метрических единицах величин и дата реализации |
Метод "0111101" | AI (01) + AI (320x) + AI (15) | Масса нетто предмета в неметрических (британских) единицах величин и дата реализации |
Метод "0111110" | AI (01) + AI (310х) + AI (17) | Масса нетто предмета в метрических единицах величин и дата окончания срока годности |
Метод "0111111" | Аl (01) + Аl (320х) + Аl (17) | Масса нетто предмета в неметрических (британских) единицах величин и дата окончания срока годности |
Три строки элементов AI уплотняют до 76 битов, при этом идентификацию предмета уплотняют до 40 битов, значение массы - до 20 битов и значение даты - до 16 битов.
При кодировании трех строк элементов AI в строке элемента с идентификатором применения AI (01) отбрасывают первые три цифры (019) и последнюю контрольную цифру. Остальные 12 цифр кодируют в 40-битовом поле уплотненных данных в четырех группах по три цифры в каждой, кодируемых в десяти битах соответственно. В строке элементов с идентификаторами применения AI (310х и 320х) для обозначения массы отбрасывают 3-разрядный префикс AI (310 или 320). Из оставшейся 7-значной строки элемента с AI удаляют второй разряд слева (ноль) с целью формирования строки из 6 цифр. Указанные 6 цифр, состоящие из цифры последнего разряда AI и последних пяти цифр значения массы, кодируют в 20 битах и добавляют в поле уплотненных данных. В строке элементов с идентификаторами применения AI (11), AI (13), AI (15) или AI (17) отбрасывают 2-разрядный префикс AI (11, 13, 15 или 17) и преобразуют оставшиеся шесть цифр со структурой "ГГММДД" ("YYMMDD") в уплотненную строку со значениями от 0 до 38399 и кодируют уплотненные данные в 16 битах с помощью следующей формулы
_______________
Обозначения в структуре "ГГММДД": ГГ - разряды десятков и единиц года (например, для 2009 - 09), ММ - порядковый номер месяца (например, для января - 01), ДД - порядковый номер дня в месяце (например, второй день - 02).
.
Значение 38400 в 16-битовом подполе обозначает, что поле данных не подлежит кодированию. Этот вариант применяют для кодирования идентификации предмета и массы в случае, если методы кодирования со значениями "0100" или "0101" не поддерживают данное значение массы.
Устройство декодирования декодирует первые 40 битов в 12 цифр, преобразуя каждую из четырех групп по 10 битов в три цифры, и добавляет перед этими 12 цифрами префикс трех цифр (019), а в конец первой строки элемента с AI - контрольную цифру, вычисленную по модулю 10.
Затем устройство декодирования преобразует следующих 20 битов по основанию 10 для получения шести десятичных цифр, размещает ноль после первой цифры (слева) для создания последовательности из семи цифр, а затем добавляет префикс AI (310) или AI (320) перед указанной строкой для формирования второй строки элементов с AI передаваемого сообщения. После этого устройство декодирования преобразует последние 16 битов в числовое значение. Если при декодировании последних 16 битов получают значение 38400, то следующие данные не подлежат декодированию.
Иное значение свидетельствует о том, что была закодирована календарная дата. В соответствии с приведенной выше формулой устройством декодирования должно быть выделено 6-разрядное значение даты и в соответствии с установленной процедурой к нему должен быть добавлен в качестве префикса идентификатор применения AI (11), AI (13), AI (15) или AI (17).
Например, если при кодировании сообщения (01)90012345678908(3103)012233(15)991231 использован метод кодирования со значением "0111000", то в поле уплотненных данных в действительности включают только выделенные полужирным шрифтом цифры, но на выходе устройства декодирования будет последовательность данных "]е00190012345678908310301223315991231".
7.2.5.4.5 Поле метода кодирования со значением "01100" для идентификации предмета переменной величины и его цены
Указанный метод кодирования может быть использован в случае, если подлежащее кодированию сообщение состоит только из двух строк элементов c AI: строки с AI (01), за которой следует строка c AI (392х). Строка элемента с AI (01) для идентификации предмета должна включать в себя разряд индикатора 9. Значение цены предмета, указанное в строке элемента с AI (392х), может иметь от нуля до трех цифр после десятичной запятой (в диапазоне значений х от 0 до 3). Строку элемента с AI (01) для идентификации предмета уплотняют до 40 битов, а число десятичных разрядов после запятой в AI (392х) кодируют в двух битах. Затем цифры цены кодируют с помощью универсального числового кодирования. Все дополнительные строки элементов кодируют с помощью универсального кодирования.
При кодировании двух строк элементов AI в строке элемента с AI (01) отбрасывают три первые цифры (019) и последнюю контрольную цифру. Остальные 12 цифр кодируют в 40-битовом поле уплотненных данных в четырех группах по три цифры в каждой, соответственно кодируемых в десяти битах. В строке элемента AI (392х) отбрасывают первые три цифры (392). Следующую цифру (х), определяющую положение десятичной запятой и принимающую значение в интервале от 0 до 3, непосредственно кодируют в следующих двух битах. Данные, записанные после десятичной запятой, кодируют с помощью универсального кодирования, начиная со схемы числового кодирования.
Устройство декодирования декодирует первые 40 битов в 12 цифр, преобразуя каждую из четырех групп по десять битов в три цифры, и добавляет перед указанными 12 цифрами префикс из трех цифр - 019, а в конец первой строки элементов с AI - контрольную цифру, вычисленную по модулю 10. Затем указанное устройство добавляет первые три цифры идентификатора применения AI 392 и преобразует следующие два бита в цифру, значение которой определяет положение десятичной запятой. Остальную часть сообщения декодируют с помощью универсального кодирования.
Например, при кодировании сообщения (01)90012345678908(3922)795 с использованием метода кодирования со значением "01100" в поле уплотненных данных в действительности включают только выделенные полужирным шрифтом цифры. На выходе устройства декодирования будет последовательность данных "]е001900123456789083922795".
7.2.5.4.6 Поле метода кодирования со значением "01100" для идентификации предмета переменной величины и его цены с кодом валюты по ISO 4217
Указанный метод кодирования может быть использован в случае, если подлежащее кодированию сообщение состоит только из двух строк элементов с AI: строки с AI (01), за которой следует строка с AI (393х). Строка элемента с AI (01) для идентификации предмета должна включать в себя разряд индикатора 9. Значение цены предмета торговли, указанное в строке элемента с AI (393х), может иметь от нуля до трех цифр после десятичной запятой (в диапазоне значений х от 0 до 3). Строку элементов с AI (01) для идентификации предмета уплотняют до 40 битов, а число десятичных разрядов после запятой в Аl (393х) кодируют в двух битах. Трехзначный код валюты по ISO 4217 кодируют в десяти битах. Затем цифры цены кодируют с помощью универсального числового кодирования. Все дополнительные строки элементов кодируют путем универсального кодирования.
При кодировании двух строк элементов AI в строке элементов с AI (01) отбрасывают три первые цифры (019) и последнюю контрольную цифру. Остальные 12 цифр кодируют в 40-битовом поле уплотненных данных в четырех группах по три цифры в каждой, соответственно кодируемых в десяти битах. В строке элемента с AI (393х) отбрасывают первые три цифры (393). Следующую цифру (х), определяющую положение десятичной запятой и принимающую значение в интервале от 0 до 3, непосредственно кодируют в следующих двух битах. Следующие три цифры, соответствующие коду валюты по ISO 4217, кодируют непосредственно в следующих десяти битах. Данные, записанные после трехзначного кода валюты по ISO 4217, кодируют с помощью универсального кодирования, начиная со схемы числового кодирования.
Устройство декодирования декодирует первые 40 битов в 12 цифр, преобразуя каждую из четырех групп по десять битов в три цифры, и добавляет перед указанными 12 цифрами префикс из трех цифр - 019, а в конец первой строки элемента с AI - контрольную цифру, вычисленную по модулю 10. Далее указанное устройство добавляет первые три цифры идентификатора применения AI (393) и преобразует следующие два бита в цифру, значение которой определяет положение десятичной запятой. Затем декодируют следующие десять битов, в которых непосредственно закодированы три цифры кода валюты по ISO 4217. Остальную часть сообщения декодируют с помощью универсального кодирования.
Например, если при кодировании сообщения (01)90012345678908(3932)0401234 использован метод кодирования со значением "01101", то в поле уплотненных данных в действительности включают только выделенные полужирным шрифтом цифры, но на выходе устройства декодирования будет последовательность данных "]е0019001234567890839320401234".
7.2.5.5 Поле универсального уплотнения данных
В поле универсального уплотнения данных кодируют строки элементов с AI путем их преобразования в двоичную строку, используя комбинацию трех схем кодирования:
a) схемы числового кодирования, применяемой для чисел и знаков FNC1 и использующей для кодированного знака 3,5 бита;
b) схемы алфавитно-цифрового кодирования, применяемой для кодирования комбинации чисел и прописных букв, использующей 5 битов для кодирования любой цифры или знака FNC1, а 6 битов - для кодирования любой буквы;
c) схемы кодирования знаков по ISO/IEC 646, применяемой для комбинации прописных и строчных букв, чисел и большинства специальных графических знаков (знаков препинания), использующей для кодирования любой цифры 5 битов, любой буквы - 7 битов и любого специального графического знака - 8 битов.
Универсальное уплотнение данных предназначено для кодирования строк элементов с AI, отличающихся от специально кодируемых с помощью одного из способов кодирования уплотненных данных. Поле универсального уплотнения данных является последним полем в символе переменной длины. После того как все данные были обработаны с помощью схемы универсального уплотнения данных, процесс универсального кодирования завершают процедурой заполнения по 7.2.5.5.4.
7.2.5.5.1 Схема числового кодирования
Схема числового кодирования является схемой кодирования "по умолчанию", которая действует начиная с начала поля универсального кодирования данных. В соответствии с этой схемой две цифры или цифра и знак FNC1 (в любом порядке) подлежат кодированию в семи битах. 7-битовое значение определяют следующим образом
,
где и - значения первой и второй цифры или значение знака FNC1 соответственно (знаку FNC1 присвоено значение 10).
Значениям в диапазоне от 8 до 127 соответствуют 7-битовые двоичные величины в диапазоне от "0001000" до "1111111" (два знака FNC1 не могут быть закодированы в семи битах). Двоичная последовательность из четырех нулей "0000" в начале поля или следующая за окончанием предыдущей 7-битовой величины, определяемой по схеме числового кодирования, является указателем фиксации (или перехода) схемы алфавитно-цифрового кодирования (таблица 11).
Таблица 11 - Схема числового кодирования
Кодируемый(е) знак(и) | Закодированные двоичные величины |
Пары "цифра - цифра", "цифра - знак FNC1" и "знак FNC1 - цифра" | От 0001000 до 1111111 |
Указатель фиксации схемы алфавитно-цифрового кодирования | 0000 |
Процесс по схеме числового кодирования пар знаков продолжается до тех пор, пока не будет выполнено одно из следующих условий:
a) если остаются, по меньшей мере, два знака, к которым не применима схема числового кодирования, то в поле уплотнения данных кодируют указатель фиксации схемы алфавитно-цифрового кодирования;
b) если остается один знак, который не является цифрой, в поле уплотнения данных появляется указатель фиксации схемы алфавитно-цифрового кодирования;
c) если остается один знак, который является цифрой, сначала вычисляют размер символа, необходимый для кодирования текущей двоичной строки, а затем число недостающих битов, равное числу битов, требуемых для доведения общего числа битов до следующего четного числа, кратного 12:
1) если остается семь или более недостающих битов, кодируют цифру и знак FNC1, заполняющие следующие семь битов. Этот замыкающий знак FNC1 распознается как заполнитель и не передается устройством считывания;
2) если остается от четырех до шести битов, к цифровому значению добавляют единицу и кодируют результат в следующих четырех битах;
3) в остальных случаях применяют больший по размеру символ, кодирующий цифру и знак FNC1, дополняющие следующие семь битов. Этот замыкающий знак FNC1 распознается как заполнитель и не передается устройством считывания.
Все остальные биты кодируют в соответствии с процедурой заполнения по 7.2.5.5.4;
d) если не остается ни одного знака, то все оставшиеся биты кодируют в соответствии с процедурой заполнения по 7.2.5.5.4.
Каждый раз, когда появляется указатель фиксации схемы алфавитно-цифрового кодирования, схема кодирования соответствующим образом изменяется. В случае если следующий знак данных необходимо закодировать как знак по ISO/IEC 646, в схеме алфавитно-цифрового кодирования предусмотрено появления указателя фиксации схемы кодирования знаков по ISO/IEC 646, следующего за указателем фиксации схемы алфавитно-цифрового кодирования.
В процессе декодирования должны быть проведены следующие специальные проверки, когда уплотнение в соответствии со схемой числового кодирования действует в конце символа:
a) если последние семь битов, представленные по схеме числового кодирования, непосредственно перед последовательностью заполнителей кодируют цифру, за которой следует знак FNC1, то знак FNC1 игнорируют;
b) если схема числового кодирования вступает в силу, когда в символе остается только от четырех до шести битов, значение 4-битовой строки в начале оставшихся битов преобразуется в десятичные значения:
1) если значение равно нулю, то сообщение завершено;
2) в остальных случаях значение декодируется как последняя цифра в сообщении, равная десятичному значению минус единица.
7.2.5.5.2 Схема алфавитно-цифрового кодирования
С помощью схемы алфавитно-цифрового кодирования кодируют цифры, знак FNC1/указатель фиксации схемы числового кодирования, прописные буквы, пять специальных графических знаков (знаков препинания) и два знака указателя фиксации. Последовательность закодированных битов не имеет фиксированного числа битов на один знак. Биты присваивают в соответствии с длиной (в битах) каждого закодированного знака. Для кодирования каждого знака используют от трех до шести битов в соответствии с таблицей 12.
Таблица 12 - Схема алфавитно-цифрового кодирования
Знаки | Десятичные значения знаков ASCII | Закодированное значение | Закодированные двоичные данные |
0-9 | 48-57 | Десятичное значение ASCII минус 43 (5 битов) | От 00101 до 01110 |
Знак FNCI/указатель фиксации схемы числового кодирования | 15 (5 битов) | 01111 | |
A-Z | 65-90 | Десятичное значение ASCII минус 33 (6 битов) | От 100000 до 111001 |
* (ЗВЕЗДОЧКА) | 42 | 58 (6 битов) | 111010 |
, (ЗАПЯТАЯ) | 44 | 59 (6 битов) | 111011 |
- (МИНУС или дефис) | 45 | 60 (6 битов) | 111100 |
. (ТОЧКА в конце предложения или ТОЧКА как разделитель разрядов в десятичном числе | 46 | 61 (6 битов) | 111101 |
/ (ДРОБНАЯ ЧЕРТА) | 47 | 62 (6 битов) | 111110 |
Схема числового кодирования | 0 (3 бита) | 000 | |
Указатель фиксации схемы кодирования знаков по ISO/IEC 646 | 4 (5 битов) | 00100 |
_______________
Знак "ТОЧКА" используют в международных стандартах как разделитель разрядов в десятичном числе (в Российской Федерации для этих целей используют знак "ЗАПЯТАЯ").
Данные кодируют путем добавления двоичных данных переменной длины каждого знака в поле универсального уплотнения данных со следующими исключениями:
a) если следующим знаком данных является знак FNC1, его кодируют по схеме алфавитно-цифрового кодирования;
b) если следующий знак данных может быть закодирован только с помощью схемы кодирования знаков по ISO/IEC 646, то в поле уплотнения данных кодируют указатель фиксации схемы кодирования знаков по ISO/IEC 646;
c) если следующие шесть знаков данных могут быть закодированы с помощью схемы числового кодирования, то в поле уплотнения данных кодируют указатель фиксации схемы числового кодирования;
d) если следующие четыре или более знаков данных могут быть закодированы с помощью схемы числового кодирования и они замыкают строку данных, то в поле уплотнения данных кодируют указатель фиксации схемы числового кодирования.
Каждый раз, когда кодируют указатель фиксации, схема кодирования изменяется в соответствии с этим указателем.
При декодировании кодированного двоичного поля сначала в поле проверяют первый (или три первых) бита, следующий(ие) за ранее декодированным знаком или расположенный(ые) в начале поля:
a) если первый бит равен "1", следующий знак должен быть декодирован как 6-битовый знак;
b) если первые три бита равны "000", то это указатель фиксации;
c) в остальных случаях следующий знак декодируют как 5-битовый знак.
7.2.5.5.3 Схема кодирования знаков по ISO/IEC 646
При этом способе кодируют цифры, прописные и строчные буквы, а также 21 специальный графический знак по ISO/IEC 646, знак FNC1 и два знака указателя фиксации, требуемые символикой. Двоичный кодированный поток не имеет фиксированного числа битов для одного знака. Биты присваивают в соответствии с длиной (в битах) каждого кодируемого знака. Для кодирования каждого знака необходимо от трех до восьми битов (таблица 13).
Таблица 13 - Схема кодирования знаков по ISO/IEC 646
Знаки | Десятичные значения знаков ASCII | Кодируемое значение | Закодированные двоичные данные |
0-9 | 48-57 | Десятичное значение ASCII минус 43 (5 битов) | От 00101 до 01110 |
FNC1/указатель фиксации схемы числового кодирования | 15 (5 битов) | 01111 | |
A-Z | 65-90 | Десятичное значение ASCII минус 1 (7 битов) | От 1000000 до 1011001 |
a-z | 97-122 | Десятичное значение ASCII минус 7 (7 битов) | От 1011010 до 1110011 |
! (ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК) | 33 | 232 (8 битов) | 11101000 |
" (КАВЫЧКА) | 34 | 233 (8 битов) | 11101001 |
% (ПРОЦЕНТЫ) | 37 | 234 (8 битов) | 11101010 |
& (КОММЕРЧЕСКОЕ И) | 38 | 235 (8 битов) | 11101011 |
' (АПОСТРОФ) | 39 | 236 (8 битов) | 11101100 |
( (СКОБКА ЛЕВАЯ) | 40 | 237 (8 битов) | 11101101 |
) (СКОБКА ПРАВАЯ) | 41 | 238 (8 битов) | 11101110 |
* (ЗВЕЗДОЧКА) | 42 | 239 (8 битов) | 11101111 |
+ (ПЛЮС) | 43 | 240 (8 битов) | 11110000 |
, (ЗАПЯТАЯ) | 44 | 241 (8 битов) | 11110001 |
- (МИНУС или ДЕФИС) | 45 | 242 (8 битов) | 11110010 |
. (ТОЧКА в конце предложения или ТОЧКА) | 46 | 243 (8 битов) | 11110011 |
/ (ДРОБНАЯ ЧЕРТА) | 47 | 244 (8 битов) | 11110100 |
: (ДВОЕТОЧИЕ) | 58 | 245 (8 битов) | 11110101 |
; (ТОЧКА С ЗАПЯТОЙ) | 59 | 246 (8 битов) | 11110110 |
< (МЕНЬШЕ) | 60 | 247 (8 битов) | 11110111 |
= (РАВНО) | 61 | 248 (8 битов) | 11111000 |
> (БОЛЬШЕ) | 62 | 249 (8 битов) | 11111001 |
? (ВОПРОСИТЕЛЬНЫЙ ЗНАК) | 63 | 250 (8 битов) | 11111010 |
_ (ПОДЧЕРКИВАНИЕ) | 95 | 251 (8 битов) | 11111011 |
ПРОБЕЛ | 32 | 252 (8 битов) | 11111100 |
Указатель фиксации схемы числового кодирования | 0 (3 бита) | 000 | |
Указатель фиксации схемы алфавитно-цифрового кодирования | 4(5 битов) | 00100 |
_______________
Знак "ТОЧКА" используют как разделитель разрядов в десятичном числе (в Российской Федерации для этих целей используют знак "ЗАПЯТАЯ").
Данные кодируют путем добавления к каждому знаку в поле универсального уплотнения данных двоичных данных переменной длины со следующими исключениями:
a) если следующим знаком является знак FNC1, его кодируют согласно схеме кодирования знаков по lSO/IEC 646;
b) если следующие четыре знака могут быть закодированы по схеме числового кодирования и в последующих десяти знаках отсутствует знак, который может быть закодирован только с помощью схемы кодирования знаков по ISO/IEC 646, то в поле универсального уплотнения данных кодируют указатель фиксации схемы числового кодирования;
c) если следующие пять знаков могут быть закодированы по схеме алфавитно-цифрового кодирования и в последующих десяти знаках отсутствует знак, который может быть закодирован только с помощью схемы кодирования знаков по ISO/IEC 646, то в поле универсального уплотнения данных кодируют указатель фиксации схемы алфавитно-цифрового кодирования.
Единственным исключением является случай, когда число завершающих знаков данных менее 10. В этом случае проверку 10 знаков досрочно завершают с окончанием данных. Если кодируют указатель фиксации, то схема кодирования соответствующим образом изменяется.
При декодировании кодированного двоичного поля сначала производят проверку первых трех или пяти битов, следующих за ранее декодированным знаком или расположенных в начале поля:
a) если первые три бита равны "000", это соответствует указателю фиксации схемы числового кодирования;
b) в противном случае берут десятичное значение первых пяти битов. Если это значение:
1) равно 15 или менее, то следующий знак декодируют как 5-битовый знак;
2) находится в диапазоне от 16 до 28, то следующий знак декодируют как 7-битовый знак;
3) равно 29 или более, то следующий знак декодируют как 8-битовый знак.
7.2.5.5.4 Биты-заполнители для поля универсального уплотнения данных
Число знаков символа в символе должно быть наименьшим необходимым числом для кодирования данных в этом символе. Тем не менее после кодирования данных в поле уплотнения данных в символе может возникнуть недостаток битов. Указанный недостаток должен быть восполнен последовательностью битов-заполнителей для достижения полной информационной емкости символа.
Строку битов-заполнителей создают путем повтора 5-битовых последовательностей "00100", которые одновременно являются указателем фиксации схемы кодирования знаков по ISO/IEC 646 в схеме алфавитно-цифрового кодирования и указателем фиксации схемы алфавитно-цифрового кодирования в схеме кодирования знаков по ISO/IEC 646, так что способы кодирования и их указатели фиксации чередуются без кодирования дополнительных данных. Последняя дополнительная последовательность может быть усечена справа, если в символе недостаточно битов.
Если схема числового кодирования завершает кодирование данных, перед чередующейся последовательностью битов-заполнителей "00100" требуется 4-битовый указатель фиксации алфавитно-цифрового кодирования "0000". Например, если кодирование завершается в схеме числового кодирования и остается семь битов, они должны быть закодированы как "0000001", что является указателем фиксации схемы алфавитно-цифрового кодирования "0000", за которым следуют первые три бита указателя фиксации "001" схемы кодирования знаков по ISO/IEC 646 "00100". Первый 4-битовый указатель фиксации может быть сокращен, если для заполнения требуется менее четырех битов.
7.2.6 Контрольный знак символа
Первым знаком символа GS1 DataBar Расширенный является контрольный знак символа. В нем закодирована информация о длине символа и контрольной сумме взвешенных значений ширины элементов знаков символа для данных (далее - знаки символа). Используют только первые 4009 значений (от 0 до 4008) контрольного знака символа.
Число знаков символа (в диапазоне от 4 до 22) и значение контрольной суммы кодируют в контрольном знаке следующим образом:
Значение контрольного знака =211·(-4) + значение контрольной суммы.
Значение контрольной суммы равно остатку от деления по модулю 211 взвешенной суммы значений ширины элементов в знаке символа. Весовые коэффициенты, приведенные в таблице 14, вычисляют как степенную функцию с аргументом 3 по модулю 211, начиная с первого элемента первого знака символа.
Таблица 14 - Весовые коэффициенты элементов знаков символа для вычисления значения контрольной суммы по модулю 211
Расположение знака символа по отношению | Весовой коэффициент знака символа для элемента с номером | |||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
Слева от А1 | - | - | - | - | - | - | - | - |
Справа от А1 | 1 | 3 | 9 | 27 | 81 | 32 | 96 | 77 |
Слева от А2 | 20 | 60 | 180 | 118 | 143 | 7 | 21 | 63 |
Справа от А2 | 189 | 145 | 13 | 39 | 117 | 140 | 209 | 205 |
Слева от В1 | 193 | 157 | 49 | 147 | 19 | 57 | 171 | 91 |
Справа от В1 | 62 | 186 | 136 | 197 | 169 | 85 | 44 | 132 |
Слева от В2 | 185 | 133 | 188 | 142 | 4 | 12 | 36 | 108 |
Справа от В2 | 113 | 128 | 173 | 97 | 80 | 29 | 87 | 50 |
Слева от С1 | 150 | 28 | 84 | 41 | 123 | 158 | 52 | 156 |
Справа от С1 | 46 | 138 | 203 | 187 | 139 | 206 | 196 | 166 |
Слева от С2 | 76 | 17 | 51 | 153 | 37 | 111 | 122 | 155 |
Справа от С2 | 43 | 129 | 176 | 106 | 107 | 110 | 119 | 146 |
Слева от D1 | 16 | 48 | 144 | 10 | 30 | 90 | 59 | 177 |
Справа от D1 | 109 | 116 | 137 | 200 | 178 | 112 | 125 | 164 |
Слева от D2 | 70 | 210 | 208 | 202 | 184 | 130 | 179 | 115 |
Справа от D2 | 134 | 191 | 151 | 31 | 93 | 68 | 204 | 190 |
Слева от Е1 | 148 | 22 | 66 | 198 | 172 | 94 | 71 | 2 |
Справа от Е1 | 6 | 18 | 54 | 162 | 64 | 192 | 154 | 40 |
Слева от Е2 | 120 | 149 | 25 | 75 | 14 | 42 | 126 | 167 |
Справа от Е2 | 79 | 26 | 78 | 23 | 69 | 207 | 199 | 175 |
Слева от F1 | 103 | 98 | 83 | 38 | 114 | 131 | 182 | 124 |
Справа от F1 | 161 | 61 | 183 | 127 | 170 | 88 | 53 | 159 |
Слева от F2 | 55 | 165 | 73 | 8 | 24 | 72 | 5 | 15 |
Справа от F2 | 45 | 135 | 194 | 160 | 58 | 174 | 100 | 89 |
Слева от шаблона поиска А1 расположен контрольным знак, для элементов которого не устанавливают весовые коэффициенты. |
Значение контрольной суммы по модулю 211 вычисляют по формуле
,
где - произведение ширины элемента (в модулях) на весовой коэффициент этого элемента, расположенного в позиции М знака символа N;
- обозначение знака символа (например, "справа от С1", что соответствует знаку символа, расположенному справа от шаблона поиска С1) по таблице 14 не является последовательным, а определяется в соответствии с последовательностью расположения знаков символа по таблице 16;
- обозначение последнего знака символа в символе.
_______________
- ширина элемента, - весовой коэффициент элемента. принимает значения от 1 до ; - от 1 до 8.
В приложении F, раздел F.3 приведен пример кодирования символа GS1 DataBar Расширенный.
7.2.7 Шаблон поиска
Для символов GS1 DataBar Расширенный предусмотрено двенадцать уникальных шаблонов поиска символа. Эти шаблоны размещены между парами знаков символа. В связи с тем, что шаблоны поиска являются смежными со знаками символа, символ может быть сканирован по каждому из сегментов, состоящим из знака символа и смежного с ним шаблона поиска.
В случае, если символ состоит из нечетного числа знаков символа, то он должен быть завершен последним шаблоном поиска и правым шаблоном-ограничителем. В этом случае последний шаблон поиска будет прилегать справа к последнему знаку символа.
Двенадцать шаблонов базируются на шести основных шаблонах - от А до F. Каждый основной шаблон имеет два варианта исполнения: первый, в котором начальным элементом является пробел слева, и второй, в котором начальным элементом является штрих. Оба варианта основного шаблона поиска распознают с помощью черно-белой инверсии их элементов. 12 шаблонам поиска присвоены обозначения А1, А2, В1, В2, С1, С2, D1, D2, Е1, Е2, F1 и F2. В вариантах шаблонов, в обозначении которых присутствует "1", начальным элементом является пробел слева. Элементы вариантов шаблонов, в обозначении которых присутствует "2", являются зеркальным отображением с инвертированием черного и белого цветов шаблонов с обозначением "1". Значения ширины элементов (в модулях) приведены для шести базовых шаблонов в таблице 15.
Каждый шаблон поиска состоит из пяти элементов общей шириной 15 модулей. Для вариантов шаблонов с обозначением "1" общее число модулей в элементах 2 и 3 находится в диапазоне от 10 до 12, а общее число модулей в элементах 4 и 5 равно 2. Отношение суммы модулей элементов 2 и 3 к сумме модулей элементов 2, 3, 4 и 5 находится в диапазоне от 10:12 до 12:14. Эти отношения используют на первом этапе логики распознавания шаблона поиска. Аналогично, для шаблонов поиска, имеющих в обозначении цифру "2", сопоставляют общую ширину 1, 2, 3 и 4 элементов с общей шириной элементов 3 и 4.
Таблица 15 - Ширина элементов шаблонов поиска
Обозначение шаблона поиска | Номер элемента в шаблоне | Обозначение шаблона поиска | Номер элемента в шаблоне | ||||||||
1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5 | ||
Ширина элемента в модулях (начальным элементом является пробел) | Ширина элемента в модулях (начальным элементом является штрих) | ||||||||||
А1 | 1 | 8 | 4 | 1 | 1 | А2 | 1 | 1 | 4 | 8 | 1 |
В1 | 3 | 6 | 4 | 1 | 1 | В2 | 1 | 1 | 4 | 6 | 3 |
С1 | 3 | 4 | 6 | 1 | 1 | С2 | 1 | 1 | 6 | 4 | 3 |
D1 | 3 | 2 | 8 | 1 | 1 | D2 | 1 | 1 | 8 | 2 | 3 |
Е1 | 2 | 6 | 5 | 1 | 1 | Е2 | 1 | 1 | 5 | 6 | 2 |
F1 | 2 | 2 | 9 | 1 | 1 | F2 | 1 | 1 | 9 | 2 | 2 |
В символах GS1 DataBar Расширенный шаблоны поиска применяют в 10 уникальных наборах, выбираемых в зависимости от длины символа (таблица 16). Набор делят на две группы. В любой группе каждый набор имеет уникальное подмножество шаблонов поиска для его отличия от других наборов в группе. Указанные последовательности наборов предназначены для предотвращения ошибок при определении длины символа, которые могут появиться при ошибочном декодировании контрольного знака.
Таблица 16 - Последовательности шаблонов поиска
Число сегментов | Порядок следования шаблонов поиска | ||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
Группа 1 | |||||||||||
4 | А1 | А2 | |||||||||
5 или 6 | А1 | В2 | В1 | ||||||||
7 или 8 | А1 | С2 | В1 | D2 | |||||||
9 или 10 | А1 | Е2 | В1 | D2 | С1 | ||||||
11 или 12 | А1 | Е2 | В1 | D2 | D1 | F2 | |||||
13 или 14 | А1 | Е2 | В1 | D2 | Е1 | F2 | F1 | ||||
Группа 2 | |||||||||||
15 или 16 | А1 | А2 | В1 | В2 | С1 | С2 | D1 | D2 | |||
17 или 18 | А1 | А2 | В1 | В2 | С1 | С2 | D1 | Е2 | Е1 | ||
19 или 20 | А1 | А2 | В1 | В2 | С1 | С2 | D1 | Е2 | F1 | F2 | |
21 или 22 | А1 | А2 | В1 | В2 | С1 | D2 | D1 | Е2 | Е1 | F2 | F1 |
7.2.8 Символ GS1 DataBar Расширенный Многострочный
Символ GS1 DataBar Расширенный может быть представлен построчно с числом строк от 2 до 11. На рисунке 12 приведен символ, состоящий из двух строк. Символ GS1 DataBar Расширенный Многострочный применяют в случае, если область для нанесения символа или печатающее устройство не позволяют обеспечить печать символа в одну строку. Высота каждой строки символа равна 34Х, высота шаблона - разделителя строк - 3Х. На рисунках 10 и 12 приведены примеры символов, в которых закодированы одни и те же данные.
Рисунок 12 - Символ GS1 DataBar Расширенный Многострочный, представляющий номер (01)98898765432106(3202)012345(15)991231
Число знаков символа во всех строках, кроме последней, должно быть четным. В случае если символ GS1 DataBar Расширенный Многострочный является линейным компонентом символа GS1 Композитный, первая строка символа GS1 DataBar Расширенный Многострочный должна содержать не менее четырех знаков символа. Порядок расположения строк символа - сверху вниз. При необходимости последняя строка символа должна содержать минимум два знака символа с дополнительными заполнителями. В случае если символ GS1 DataBar Расширенный Многострочный является частью символа GS1 Композитный, двумерный компонент должен быть напечатан над его верхней строкой.
Каждая строка символа GS1 DataBar Расширенный Многострочный должна иметь шаблон поиска между каждой парой знаков символа и шаблоны-ограничители в начале и в конце строки из двух элементов. Последняя строка символа может иметь нечетное число знаков символа, при этом последний шаблон поиска должен быть расположен рядом с правым шаблоном-ограничителем.
Первая строка и последующие нечетные строки символа должны начинаться с пробела, в то время как вторая строка и следующие четные строки должны начинаться со штриха. Исключение может быть сделано только для последней (нижней) строки (рисунок 13). В случае если строка содержит четное число пар сегментов (2, 4 и т. д. пар, что соответствует 4, 8 и т.д. сегментам), то четные строки должны быть напечатаны с обратным порядком следования элементов, то есть как их зеркальное отображение для того, чтобы четные строки начинались со штриха. В случае если в строке имеется нечетное число пар сегментов (1, 3, 5 и т.д. , что соответствует 2, 6, 10 и так далее сегментам), то четные строки должны естественным образом начинаться со штриха. В таблице 17 приведены строки символа с указанием порядка следования элементов.
Таблица 17 - Строки символа GS1 DataBar Расширенный Многострочный с указанием порядка следования элементов в сегментах
Номер строки | Ширина символа в сегментах | |||||||||
2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | |
1 | П | П | П | П | П | П | П | П | П | П |
2 | П | О | П | О | П | О | П | О | П | О |
3 | П | П | П | П | П | |||||
4 | П | О | П | |||||||
5 | П | П | ||||||||
6 | П | О | ||||||||
7 | П | |||||||||
8 | П | |||||||||
9 | П | |||||||||
10 | П | |||||||||
11 | П | |||||||||
П - прямой порядок следования элементов в строке, О - обратный порядок следования элементов; недопустимые варианты оставлены незаполненными. |
Шаблон - разделитель строк высотой не менее 3Х, отделяющий строки символа друг от друга, состоит из трех рядов высотой не менее 1X.
Черный или белый цвет каждого модуля для любого ряда шаблона - разделителя строк определяют следующим образом. Цвет первых четырех и последних четырех модулей каждого ряда шаблона - разделителя строк должен быть светлым. Верхний ряд шаблона - разделителя строк содержит модули противоположного цвета по отношению к модулям штрихов и пробелов расположенной выше смежной строки символа за исключением 13 модулей под каждым из шаблонов поиска этой строки: под элементами 1, 2 и 3 для варианта шаблонов поиска "Группа 1" и под элементами 3, 4 и 5 варианта шаблонов поиска "Группа 2". Цвет указанных 13 модулей должен быть светлым под смежными штрихами шаблона поиска и чередующимся (темным, светлым, темным и т.д.) под смежными пробелами шаблона поиска.
_______________
См. таблицу 16.
Средний ряд состоит из чередующихся светлых и темных модулей, за исключением окончаний.
Структура нижнего ряда аналогична структуре верхнего ряда. Цвет модулей нижнего ряда должен быть противоположным цвету модулей штрихов и пробелов расположенной ниже смежной строки символа, за исключением ее окончаний и 13 модулей над каждым шаблоном поиска: над элементами 1, 2 и 3 варианта шаблонов поиска "Группа 1" и над элементами 3, 4 и 5 варианта шаблонов поиска "2". Цвет указанных 13 модулей должен быть светлым над смежными штрихами шаблона поиска и чередующимся (темным, светлым, темным и т.д.) над смежными пробелами шаблона поиска.
Цвет первых четырех и последних четырех модулей каждого ряда шаблона - разделителя строк должен быть светлым, доминирующим над цветом, получаемым из системы чередования.
На рисунке 12 приведен пример символа GS1 DataBar Расширенный Многострочный, состоящего из восьми знаков символа. Символ включает в себя две строки, каждая из которых содержит четыре знака символа. Верхняя строка включает в себя первые четыре знака символа и заканчивается с правой стороны шаблоном-ограничителем, состоящим из одного пробела и одного штриха шириной 1Х каждый. Нижнюю строку наносят как зеркальное отображение данной строки так, как она должна быть напечатана в нормальном виде. Нижняя строка начинается слева с зеркального отображения четырех оставшихся знаков символа и заканчивается с правой стороны шаблоном-ограничителем, состоящим из одного штриха и одного пробела шириной 1Х каждый. Общий размер символа, приведенного в качестве примера на рисунке 12, имеет следующие параметры: длина символа - 102Х, высота - 71Х.
Существует исключение для требования о полной перестановке строки. Если последняя строка должна быть отображена зеркально слева направо и при этом она является неполной строкой с нечетным числом шаблонов поиска, то данную строку смещают на один модуль вправо путем добавления к левой части строки модуля пробела. Данное требование обусловлено тем, что неполная строка с нечетным числом шаблонов поиска имеет симметричные шаблоны - ограничители штрихов, которые после полной перестановки (без сдвига на один модуль) будут иметь точно такой же вид. На рисунке 13 приведен пример символа GS1 DataBar Расширенный Многострочный, для которого должно быть проведено смещение на один модуль последней строки.
Рисунок 13 - Символ GS1 DataBar Расширенный Многострочный, представляющий номер (01)95012345678903(3103)000123
7.2.9 Рекомендуемый алгоритм декодирования
Системы считывания штриховых кодов обеспечивают считывание настолько несовершенных символов, насколько это позволяют используемые на практике алгоритмы декодирования. В настоящем подразделе приведен рекомендуемый алгоритм декодирования, который применяют для расчета значения декодируемости по ISO/IEC 15416 при измерении качества печати символа. Алгоритм включает в себя следующие этапы декодирования символа:
a) проводят поиск сегмента методом сканирования символа слева направо и справа налево с целью нахождения последовательности из четырех элементов с отношением:
при сканировании слева направо:
9,5:12 ((элемент 1 + элемент 2): (элемент 1 + элемент 2 + элемент 3 + элемент 4)) 12,5:14;
при сканировании справа налево:
9,5:12 ((элемент 3 +элемент 4): (элемент 1 + элемент 2 + элемент 3 + элемент 4)) 12,5:14.
Данное соотношение определяет элементы шаблона поиска со второго по пятый.
Используя метод, приведенный в перечислении b), декодируют шаблон поиска для нахождения нормированных значений "от края до подобного края" (штрих плюс пробел и пробел плюс штрих) Е1 и Е2, исходя из размера () суммы значений ширины первых четырех элементов шаблона поиска. Проверяют соответствие значений Е1 и Е2 действительному шаблону поиска символа GS1 DataBar Расширенный Многострочный;
b) осуществляют проверку соответствия отношения ширины каждого смежного знака символа к ширине шаблона поиска значению (17±1,5):15, затем декодируют каждый знак данных следующим образом:
1) проводят семь измерений параметров ширины , , , , , и (рисунок 14);
Рисунок 14 - Измеряемые параметры ширины при декодировании
Примечание - На рисунке 14 первый элемент показан как левый темный элемент, однако знаки символа также могут быть представлены с отражением слева направо и/или инвертированием элементов "темный - светлый".
2) преобразуют измеренные значения , , , , и в нормативные значения , , , , и , которые представляют собой ширину в целых модулях () этих измеренных размеров. Для значения используют следующие выражения:
если , то 2;
если , то 3;
если , то 4;
если , то 5;
если , то 6;
если , то 7;
если , то 8;
если , то 9.
Если данные условия не выполняются, знак символа считают ошибочным;
3) определяют нормированные значения ширины элементов исходя из величин . К ширине последнего элемента (вместо ее вычисления по значениям ) относят оставшиеся модули. Определение действительных размеров ширины элементов является единственным решением, при котором в знаке символа отсутствуют элементы шириной менее одного модуля и присутствует хотя бы один нечетный элемент шириной один модуль. Например, на рисунке 14 значения от до равны {4 2 6 7 3 3}. Возможными полученными наборами элементов будут {2 2 0 6 1 2 1 3}, {3 1 1 5 2 1 2 2} или {4 0 2 4 3 0 3 1}. Только значения ширины для восьми элементов {3 1 1 5 2 1 2 2} удовлетворяют требованиям, поэтому их выбирают в качестве значений ширины элементов. Если ни один полученный набор значений ширины элементов не является действительным, то знак считают ошибочным. В приложении G приведена реализация алгоритма декодирования ширины элементов на языке программирования С;
4) определяют значения четного и нечетного поднаборов с помощью программы, приведенной в приложении В;
5) вычисляют значение знака символа из значений четного и нечетного поднаборов;
6) декодируют значения шаблона поиска с помощью приведенного выше метода определения нормированной ширины элементов и выбирают шаблон поиска по таблице 15;
7) вычисляют и сохраняют значения произведений весовых коэффициентов на значения ширины элементов для расчета контрольной суммы;
c) проверяют (после декодирования всех знаков символа и шаблонов поиска, учтенных в контрольном знаке), соответствует ли контрольная сумма по модулю 211, вычисленная на основе контрольного знака, взвешенной сумме значений ширины элементов знаков символа по модулю 211;
_______________
См. 7.2.6.
d) преобразуют знаки данных в двоичную строку с последующим ее переводом в строку элементов с идентификаторами применения AI;
e) дополнительно проводят вторичные проверки изменения скорости и абсолютного времени сканирования, размеров и т.п., целесообразность которых определяют исходя из типа конкретного устройства считывания и предполагаемых условий применения.
При разработке сканеров, предназначенных для практического считывания символов GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный, требуются средства обеспечения надежности измерений, такие как сбор избыточных данных. В приложении Н приведены дополнительные рекомендации по декодированию символов, которые следует учитывать для минимизации ошибочных считываний.
8 Качество символа
8.1 Параметры линейной символики
В ISO/IEC 15416 установлена типовая методика измерения и классификации символов штрихового кода, в соответствии с которой должна проводиться оценка качества символов семейства символик GS1 DataBar. Рекомендуемые алгоритмы декодирования, установленные в настоящем стандарте для всех типов символов символики GS1 DataBar, следует использовать при оценке параметров "декодирование" и "декодируемость" по ISO/IEC 15416. Все элементы в шаблонах - разделителях строк должны быть визуально различимы. При оценке качества символа качество шаблонов - разделителей строк не оценивают. В приложении J приведены рекомендации по печати символов.
8.2 Дополнительный критерий для оценки "годен/брак"
ISO/IEC 15416 предусматривает возможность установления в спецификации символики дополнительного критерия "годен/брак". Для первого и третьего типа символов символики GS1 DataBar дополнительный критерий заключается в том, что при каждом тестовом сканировании должны присутствовать оба внутренних элемента шаблона-ограничителя, ширина каждого из которых должна быть не более трех размеров Z. Каждому отдельному профилю отражения при сканировании, который не соответствует этому требованию, должен быть присвоен класс 0.
_______________
Размер Z - средняя ширина нанесенных узких элементов в символе штрихового кода.
В настоящем стандарте определены новые комбинации элементов - штрихов и пробелов шаблонов-ограничителей в символе GS1 DataBar Ограниченный. Элементы - штрихи и пробелы шаблонов-ограничителей в настоящее время проверяют с помощью нового рекомендуемого алгоритма декодирования в соответствии с требованиями 6.2.6, перечисления g) и h). Кроме того, конечный правый шаблон-ограничитель должен удовлетворять следующему требованию или, в противном случае, сканированию присваивают класс качества 0.
Совокупная ширина внутреннего пробела и штриха конечного шаблона-ограничителя должна быть более 11/52 суммарной ширины четырнадцати элементов, образующих правый знак символа (т.е. 5,5 модулей).
8.3 Многострочные символы
В соответствии с требованиями ISO/IEC 15416 каждая строка многострочного символа должна оцениваться так же, как отдельный символ. Пути сканирования должны проходить через полосу проверки, пересекающую символ вдоль осевой линии, перпендикулярную к штрихам и занимающую 80% высоты штрихов каждой строки символа (по ISO/IEC 15416) для того, чтобы минимизировать последствия возможного захвата смежных строк. Минимальное число сканирований каждой строки должно быть менее десяти или числа, полученного в результате деления высоты строки на диаметр измерительной апертуры. Полный класс символа должен соответствовать наименьшему полному классу строки этого символа.
9 Передаваемые данные
Семейство символик GS1 DataBar предназначено для применения совместно с идентификаторами символики по ISO/IEC 15424. Прикладные информационные системы, использующие символы GS1 DataBar, должны обеспечивать использование идентификаторов символик устройствами считывания. Система GS1 устанавливает обязательные требования к применению идентификаторов символики. Прикладные информационные системы, не использующие идентификаторы символик, не смогут обеспечить распознавание идентификаторов применения в символах GS1 DataBar или будут ошибочно интерпретировать данные символов других символик в качестве данных с идентификаторами применения. Для символов GS1 DataBar используют префикс идентификатора символики "]е0". Если линейный символ GS1 DataBar сопровождает двумерный компонент, то строка элементов данных с AI следует непосредственно за данными в линейном компоненте.
Информация, закодированная в символах GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный или GS1 DataBar Ограниченный, должна передаваться, например, как последовательность "]е00110012345678902", где выделенные полужирным шрифтом цифры 1001234567890 представляют собой данные, закодированные в символе. К этим данным добавляют префикс идентификатора символики, идентификатор применения "01" для идентификации предмета и контрольную цифру "2", вычисленную по модулю 10, согласно алгоритму GS1.
В символах GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный кодируют идентификаторы применения, поэтому в качестве префикса к закодированным данным добавляют префикс идентификатора символики. В символах GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный может быть закодирован знак FNC1, который передается как управляющий знак <GS> (десятичное значение знака в наборе знаков ASCII-29), если он не является последним знаком в символе - в этом случае знак FNC1 не передается.
Для символов GS1 Композитный строки элементов с AI в двумерном компоненте должны передаваться непосредственно после данных, закодированных в линейном компоненте. Как правило, устройство считывания должно декодировать оба компонента, если в линейном компоненте задан флаг сопровождения. Однако устройство считывания также должно обеспечивать режим функционирования, при котором декодируется и передается только линейный компонент, независимо от состояния флага сопровождения. Данный режим поддерживают прикладные информационные системы, в которых необходима только основная идентификация предметов.
Устройство считывания должно поддерживать дополнительный вариант обработки для эмуляции символики. Этот режим обеспечивает эмуляцию символики GS1-128 при передаче данных в соответствии с Общими спецификациям GS1. Идентификатор символики должен быть представлен как "]С1". Если длина символа GS1 DataBar Расширенный более 48 знаков данных, то передачу данных осуществляют в двух сообщениях. Каждое сообщение должно иметь префикс идентификатора символики "]С1" и не должно содержать более 48 знаков данных. Сообщения должны быть разбиты на две строки элементов (приложение D).
10 Представление для визуального чтения
При печати символа данные представления для визуального чтения должны быть расположены под соответствующим символом и напечатаны удобным для восприятия шрифтом. Спецификации по применению GS1 устанавливают дополнительные требования к представлению для визуального чтения.
11 Минимальная и максимальная ширина модуля (X)
Минимальное и максимальное значения размера Х должны быть установлены в стандартах по применению.
Размер Х должен быть постоянным на всем протяжении данного символа. При наличии связи с двумерным компонентом символ GS1 DataBar должен иметь одинаковый с ним размер X.
12 Параметры, устанавливаемые исходя из заданного применения
Параметры, связанные с содержанием данных, размер X, минимальная высота символа, минимальный класс качества символа, тип символа, размещение символа и прочие необходимые прикладные параметры устанавливаются GS1 для каждого конкретного применения.
Приложение А
(обязательное)
Вычисление контрольной цифры
С помощью символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Ограниченный кодируют структуру данных для нумерации GS1 GTIN-14, которая может представлять собой 14-разрядный идентификационный номер предмета (таблица А.1).
В символах GS1 DataBar Расширенный также кодируют структуру данных для нумерации GS1 GTIN-14 с использованием идентификатора применения "01". В символах GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный может быть также закодирована структура данных для нумерации SSCC-18 с использованием идентификатора применения "00".
Таблица А.1 - Вычисление контрольной цифры структур нумерации GS1
Струк- | Позиции разрядов | |||||||||||||||||||
GS1 | ||||||||||||||||||||
SSCC-18 | ||||||||||||||||||||
Умножают значение каждой позиции на весовые коэффициенты | ||||||||||||||||||||
х3 | х1 | х3 | х1 | х3 | х1 | х3 | х1 | х3 | х1 | х3 | х1 | х3 | х1 | х3 | х1 | х3 | ||||
Складывают результаты умножения на весовые коэффициенты и обозначают полученное число "Сумма" | ||||||||||||||||||||
Вычитают полученное число "Сумма" из ближайшего равного или большего числа, кратного 10. Результат вычитания является контрольной цифрой . |
Контрольную цифру GS1 всегда указывают в представлении для визуального чтения, устройство декодирования должно обеспечить ее передачу даже в том случае, если эта цифра не закодирована в явном виде в символах GS1 DataBar.
Приложение В
(обязательное)
Программа кодирования и декодирования ширины элементов на языке программирования С
В каждом подмножестве со структурой (n,k) значениям символа присваивают комбинации размеров элементов (различной ширины). Подпрограмма кодирования getRSSwidths на языке программирования С вычисляет размер (ширину) элементов для заданного значения подмножества. Подпрограмма декодирования getRSSvalue на языке программирования С вычисляет подмножество значений при заданных размерах элементов. Последовательные значения присваивают размерам поднабора элементов в установленном порядке.
Примечание - В программе на языке С использованы первоначальные идентификаторы, включающие в себя аббревиатуру "RSS". В программу на языке С не были внесены изменения, для того чтобы избежать внесения технических изменений в доступное к открытому доступу программное обеспечение.
Последовательность размеров элементов начинают с присвоения элементам с наименьшими номерами в поднаборах размера, равного одному модулю, или наименьшего размера, подходящего для данного поднабора (в соответствии с первой комбинацией под номером 0, всем ее элементам, кроме последнего, должен быть присвоен размер, равный одному модулю, если при этом для последнего элемента не будет превышено ограничение максимального размера элемента). Последующие значения присваивают следующей действительной комбинации, которая обеспечивает наименьшие размеры (самые узкие) из возможных для элементов с младшими номерами. Например, поднабор из 6 модулей содержит значения с номерами от 0 до 9 и соответствующие комбинации размеров элементов:
Значение | Комбинация размеров (ширина) элементов |
0 | 1 1 1 3 |
1 | 1 1 2 2 |
2 | 1 1 3 1 |
3 | 1 2 1 2 |
4 | 1 2 2 1 |
5 | 1 3 1 1 |
6 | 2 1 1 2 |
7 | 2 1 2 1 |
8 | 2 2 1 1 |
9 | 3 1 1 1 |
Комбинации с элементами, ширина которых превышает максимально допустимую (переменная maxWidth), пропускают. Кроме того, исключают шаблоны, в которых отсутствуют элементы шириной один модуль (переменная noNarrow = 0).
/*********************************************************************************** | ||||||||||||||
* getRSSwidths | ||||||||||||||
* подпрограмма генерации размеров (ширины) элементов GS1 DataBar для заданного значения. | ||||||||||||||
* | ||||||||||||||
* Calling arguments (аргументы вызова): | ||||||||||||||
* val = задаваемое значение | ||||||||||||||
* n = число модулей | ||||||||||||||
* elements = число пар элементов в наборе (для GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Расширенный = 4; GS1 DataBar Ограниченный = 7) | ||||||||||||||
* maxWidth = максимальная ширина элемента в модулях | ||||||||||||||
* noNarrow = 0 пропуск шаблонов, не имеющих элементов шириной один модуль | ||||||||||||||
* | ||||||||||||||
* Return (возвращаемое значение): | ||||||||||||||
* static int widths[] = размеры (ширина) элементов | ||||||||||||||
/***********************************************************************************/ | ||||||||||||||
void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow) | ||||||||||||||
{ | ||||||||||||||
int bar; | ||||||||||||||
int elmWidth; | ||||||||||||||
int i; | ||||||||||||||
int mxwelement; | ||||||||||||||
int subVal, lessVal; | ||||||||||||||
int narrowMask = 0; | ||||||||||||||
for (bar = 0; bar < elements-1; bar++) | ||||||||||||||
{ | ||||||||||||||
for (elmWidth = 1, narrowMask |= (1<<bar); | ||||||||||||||
; | ||||||||||||||
elmWidth++, narrowMask &= ~(1<<bar)) | ||||||||||||||
{ | ||||||||||||||
/* получение всех комбинаций */ | ||||||||||||||
subVal = combins(n-elmWidth-1, elements-bar-2); | ||||||||||||||
/* исключение комбинаций с отсутствием элементов шириной один модуль */ | ||||||||||||||
if ((!noNarrow) && (narrowMask == 0) && | ||||||||||||||
(n-elmWidth-(elements-bar-1) >= elements-bar-1)) | ||||||||||||||
{ | ||||||||||||||
subVal -= combins(n-elmWidth-(elements-bar), elements-bar-2); | ||||||||||||||
} | ||||||||||||||
/* исключение комбинаций с размером (шириной) элемента более допустимой > maxVal */ | ||||||||||||||
if (elements-bar-1 > 1) | ||||||||||||||
{ | ||||||||||||||
lessVal = 0; | ||||||||||||||
for (mxwElement = n-elmWidth-(elements-bar-2); | ||||||||||||||
mxwElement > maxWidth; | ||||||||||||||
mxwElement--) | ||||||||||||||
{ | ||||||||||||||
lessVal += combins(n-elmWidth-mxwElement-1, elements-bar-3); | ||||||||||||||
} | ||||||||||||||
subVal -= lessVal * (elements-1-bar); | ||||||||||||||
} | ||||||||||||||
else if (n-elmWidth > maxWidth) | ||||||||||||||
{ | ||||||||||||||
subVal-; | ||||||||||||||
} | ||||||||||||||
val -= subVal; | ||||||||||||||
if (val < 0) break; | ||||||||||||||
} | ||||||||||||||
val += subVal; | ||||||||||||||
n -= elmWidth; | ||||||||||||||
widths[bar] = elmWidth; | ||||||||||||||
} | ||||||||||||||
widths[bar] = n; | ||||||||||||||
return; | ||||||||||||||
} | ||||||||||||||
/***************************************************************** | ||||||||||||||
* getRSSvalue | ||||||||||||||
* подпрограмма вычисления подмножества значений при заданных размерах (ширине) элементов. | ||||||||||||||
* | ||||||||||||||
* Calling arguments (аргументы вызова): | ||||||||||||||
* widths[] = заданные размеры (ширина) элементов | ||||||||||||||
* elements = число пар элементов в наборе (для GS1 DataBar Всенаправленный, GS1 DataBar усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Расширенный = 4; GS1 DataBar ограниченный = 7); | ||||||||||||||
* | ||||||||||||||
* maxWidth = максимальная ширина элемента в модулях | ||||||||||||||
* noNarrow = 0 пропуск шаблонов, не имеющих элементов шириной один модуль | ||||||||||||||
* | ||||||||||||||
* Return (возвращаемое значение): | ||||||||||||||
* Значения подмножества | ||||||||||||||
***************************************************************** | ||||||||||||||
int getRSSvalue (int widths[], int elements, int maxWidth, int noNarrow) | ||||||||||||||
{ | ||||||||||||||
int val = 0; | ||||||||||||||
int n; | ||||||||||||||
int bar; | ||||||||||||||
int elmWidth; | ||||||||||||||
int i; | ||||||||||||||
int mxwElement; | ||||||||||||||
int subVal, lessVal; | ||||||||||||||
int narrowMask = 0; | ||||||||||||||
for (n = i = 0; i < elements; i++) | ||||||||||||||
{ | ||||||||||||||
n += widths[i]; | ||||||||||||||
} | ||||||||||||||
for (bar = 0; bar < elements-1; bar++) | ||||||||||||||
{ | ||||||||||||||
for (elmWidth = 1, narrowMask |= (1<<bar); | ||||||||||||||
elmWidth < widths[bar]; | ||||||||||||||
elmWidth++, narrowMask &= ~(1"bar)) { | ||||||||||||||
/* получение всех комбинаций nk */ | ||||||||||||||
subVal = combins(n-elmWidth-1, elements-bar-2); | ||||||||||||||
/* исключение комбинаций с отсутствующими узкими элементами */ | ||||||||||||||
if ((!noNarrow) && (narrowMask == 0) && | ||||||||||||||
(n-elmWidth-(elements-bar-1 )>= elements-bar-1)) | ||||||||||||||
{ | ||||||||||||||
subVal -= combins(n-elmWidth-(elements-bar), elements-bar-2); | ||||||||||||||
} | ||||||||||||||
/* исключение комбинаций с шириной элемента более допустимой > maxVal */ | ||||||||||||||
if (elements-bar-1 > 1) | ||||||||||||||
{ | ||||||||||||||
lessVal = 0; | ||||||||||||||
for (mxwElement = n-elmWidth-(elements-bar-2); | ||||||||||||||
mxwElement > maxWidth; mxwElement--) | ||||||||||||||
{ | ||||||||||||||
lessVal += combins(n-elmWidth-mxwElement-1, elements-bar-3); | ||||||||||||||
} | ||||||||||||||
subVal -= lessVal * (elements-1-bar); | ||||||||||||||
} | ||||||||||||||
else if (n-elmWidth > maxWidth) | ||||||||||||||
{ | ||||||||||||||
subVal--; | ||||||||||||||
} | ||||||||||||||
val += subVal; | ||||||||||||||
} | ||||||||||||||
n -= elmWidth; | ||||||||||||||
} | ||||||||||||||
return (val); | ||||||||||||||
} | ||||||||||||||
/***************************************************************** | ||||||||||||||
* компоновка (n,r): возврат множества комбинаций r, выбираемых из n: | ||||||||||||||
* Комбинации = n! /((n-r)! * r!) | ||||||||||||||
*****************************************************************/ | ||||||||||||||
int combins(int n, int r) { | ||||||||||||||
int i, j; | ||||||||||||||
int maxDenom, minDenom; | ||||||||||||||
int val; | ||||||||||||||
if (n-r > r) { | ||||||||||||||
minDenom = | ||||||||||||||
r; maxDenom | ||||||||||||||
= n-r; | ||||||||||||||
} | ||||||||||||||
else | ||||||||||||||
{ | ||||||||||||||
minDenom = n-r; | ||||||||||||||
maxDenom = r; | ||||||||||||||
} | ||||||||||||||
val = 1; | ||||||||||||||
j = 1; | ||||||||||||||
for (i = n; i > maxDenom; i--) { | ||||||||||||||
val *= i; | ||||||||||||||
if (j <= minDenom) { | ||||||||||||||
val/=j; | ||||||||||||||
j++ | ||||||||||||||
} | ||||||||||||||
} | ||||||||||||||
for (; j <= minDenom; j++) { | ||||||||||||||
val/=j; | ||||||||||||||
} | ||||||||||||||
return (val); | ||||||||||||||
} |
Приложение С
(обязательное)
Ширина элементов контрольного знака в символах GS1 Data Bar Ограниченный
Значение | Последо- | Ширина элементов в знаке символа (от крайнего левого пробела до крайнего правого штриха), модули | |||||||||||||
S1 | В1 | S2 | В2 | S3 | В3 | S4 | В4 | S5 | В5 | S6 | В6 | S7 | В7 | ||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 2 | 1 | 1 |
2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 1 | 1 | 1 |
3 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 3 | 2 | 1 | 1 |
4 | 4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 3 | 1 | 1 | 1 |
5 | 5 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 3 | 1 | 1 | 1 |
6 | 6 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 1 |
7 | 7 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 3 | 1 | 1 | 1 |
8 | 8 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 3 | 1 | 1 | 1 |
9 | 9 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 |
10 | 10 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 1 |
11 | 11 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 1 | 1 | 1 |
12 | 12 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 3 | 1 | 1 | 1 |
13 | 13 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 |
14 | 14 | 1 | 1 | 1 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 |
15 | 15 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 1 |
16 | 16 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 1 | 1 | 1 |
17 | 17 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 3 | 1 | 1 | 1 |
18 | 18 | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 |
19 | 19 | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 |
20 | 20 | 1 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 1 |
21 | 21 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 3 | 1 | 1 |
22 | 22 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 1 | 1 |
23 | 23 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 2 | 1 | 1 | 1 |
24 | 24 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 2 | 2 | 1 | 1 |
25 | 25 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 1 | 1 | 1 |
26 | 26 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 2 | 1 | 1 | 1 |
27 | 27 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 |
28 | 28 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 2 | 1 | 1 | 1 |
29 | 29 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | 1 | 1 |
30 | 30 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
31 | 31 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 |
32 | 32 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 | 1 |
33 | 33 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 2 | 1 | 2 | 1 | 1 | 1 |
34 | 34 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
35 | 35 | 1 | 1 | 1 | 3 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
36 | 36 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 |
37 | 37 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 | 1 |
38 | 38 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 2 | 1 | 1 | 1 |
39 | 39 | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
40 | 40 | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
41 | 41 | 1 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
42 | 42 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 3 | 1 | 1 |
43 | 43 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 2 | 1 | 1 |
44 | 45 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 1 | 1 | 2 | 1 | 1 |
45 | 52 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 2 | 1 | 1 |
46 | 57 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 2 | 1 | 1 |
47 | 63 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 3 | 1 | 1 |
48 | 64 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 2 | 1 | 1 |
49 | 65 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 3 | 2 | 1 | 1 | 1 |
50 | 66 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 2 | 2 | 1 | 1 |
51 | 73 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
52 | 74 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
53 | 75 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 | 2 | 1 | 1 | 1 |
54 | 76 | 1 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 |
55 | 77 | 1 | 1 | 1 | 3 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 |
56 | 78 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
57 | 79 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
58 | 82 | 1 | 2 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 |
59 | 126 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 1 | 1 |
60 | 127 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 |
61 | 128 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 1 | 1 |
62 | 129 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 |
63 | 130 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 | 1 |
64 | 132 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
65 | 141 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
66 | 142 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
67 | 143 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 |
68 | 144 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 |
69 | 145 | 1 | 2 | 1 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 |
70 | 146 | 1 | 3 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 |
71 | 210 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 1 | 1 |
72 | 211 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 |
73 | 212 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 1 | 1 |
74 | 213 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 |
75 | 214 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 | 1 |
76 | 215 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 2 | 1 | 1 | 1 |
77 | 216 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
78 | 217 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
79 | 220 | 1 | 1 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
80 | 316 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 |
81 | 317 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 1 | 1 | 1 |
82 | 318 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | 1 | 1 |
83 | 319 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 2 | 1 | 1 | 1 |
84 | 320 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 2 | 1 | 1 | 1 |
85 | 322 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
86 | 323 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 2 | 1 | 1 | 1 |
87 | 326 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
88 | 337 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 2 | 1 | 1 |
Примечание - Последовательность - это серия порядковых номеров в 21х21=441 комбинациях (пронумерованных от 0 до 440), созданных подпрограммой "getRSSwidths" (приложение В) для всех комбинаций из 8 модулей для первых 6 пробелов и первых 6 штрихов. Последовательность вычисляют как ("значение комбинаций пробелов" х21) + "значение комбинаций штрихов". Перечень порядковых номеров может применяться вместо перечня значений ширины штрихов и пробелов для определения набора контрольных знаков. |
_______________
См. примечание к таблице.
Аргументы вызова для подпрограммы getRSSwidths, позволяющие генерировать штрихи и пробелы:
val | = "значение комбинации пробелов" или "значение комбинации штрихов" для пробелов или штрихов (от 0 до 20); |
n | = 8; |
elements | = 6; |
maxWidth | = 3; |
noNarrow | = 1. |
Приложение D
(обязательное)
Разбиение длинных символов GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный для режима эмуляции символик, используемых GS1
Символы GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный, которые включают в себя более 48 знаков данных, в режиме эмуляции символик, используемых GS1, перед передачей должны быть разбиты на две части. Разбиение должно быть осуществлено в начале строки элемента, которая присутствует в части, превышающей 48 знаков. Строки элементов определяют либо по присутствию знака-разделителя FNC1, либо по окончанию строки элемента фиксированной длины с AI (таблица D.1). Для того чтобы найти строки элементов, имеющие более 48 знаков, устройство считывания должно обеспечить выполнение следующих действий:
a) если данные в символах GS1 DataBar Расширенный и GS1 DataBar Расширенный Многострочный превышают 48 знаков, считывание символа проводят с его начала;
b) проверяют первые две цифры данных в линейном компоненте (первые две цифры идентификатора применения AI);
c) если первые две цифры совпадают с парами цифр, приведенными в графе "Первые две цифры идентификатора применения" таблицы D.1, пропускают столько знаков, сколько указано в графе "Число знаков" таблицы D.1 для данной пары цифр;
d) если первые две цифры не совпадают с указанными в таблице D.1, то идентификатор применения не является идентификатором применения фиксированной длины и следует провести поиск с начала символа с целью обнаружения первого знака FNC1 или до конца символа, в зависимости от того, что будет первым;
e) если число знаков превышает ограничение на 48 знаков, разбивают данные в начале последней обработанной строки элементов. В противном случае выполняют действие, указанное в перечислении b).
Таблица D.1 - Идентификаторы применения для строк элементов фиксированной длины
Первые две цифры идентификатора | Число знаков (включая | Первые две цифры | Число знаков (включая идентификатор применения |
00 | 20 | 18 | 8 |
01 | 16 | 19 | 8 |
02 | 16 | 20 | 4 |
03 | 16 | 23 | 2n + 4 |
04 | 18 | 31 | 10 |
11 | 8 | 32 | 10 |
12 | 8 | 33 | 10 |
13 | 8 | 34 | 10 |
14 | 8 | 35 | 10 |
15 | 8 | 36 | 10 |
16 | 8 | 41 | 16 |
17 | 8 | ||
Примечание 1 - Где n - третья цифра идентификатора применения (следует сразу за цифрами 2 и 3). |
_________________
См. примечание к таблице D.1.
Если первое сообщение заканчивается знаком FNC1, то этот знак не передают.
Идентификаторами применения для строк элементов фиксированной длины являются только те, в которых первые две цифры совпадают с приведенными в графе 1 "Первые две цифры идентификатора применения" таблицы D.1. Остальные идентификаторы применения могут быть определены строками элементов данных, которые имеют одно значение длины, но эти строки элементов должны рассматриваться как имеющие переменную длину, поскольку они отсутствуют в таблице идентификаторов с заранее установленной длиной. В будущем не предусматривается дополнение таблицы D.1.
Приложение Е
(справочное)
Элементы символов
Описания всех элементов по порядку для различных символов GS1 DataBar приведены в таблицах Е.1, Е.2 и Е.3.
Таблица Е.1 - Описание элементов символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный
_______________
См. рисунок 2.
Номер элемента | Тип элемента | Описание элемента |
1 | Пробел | Левый шаблон-ограничитель, внешний элемент (шириной один модуль) |
2 | Штрих | Левый шаблон-ограничитель, внутренний элемент (шириной один модуль) |
3 | Пробел | Первый знак символа, нечетный элемент номер 1 |
4 | Штрих | Первый знак символа, четный элемент номер 1 |
5 | Пробел | Первый знак символа, нечетный элемент номер 2 |
6 | Штрих | Первый знак символа, четный элемент номер 2 |
7 | Пробел | Первый знак символа, нечетный элемент номер 3 |
8 | Штрих | Первый знак символа, четный элемент номер 3 |
9 | Пробел | Первый знак символа, нечетный элемент номер 4 |
10 | Штрих | Первый знак символа, четный элемент номер 4 |
11 | Пробел | Левый шаблон поиска, элемент номер 1 |
12 | Штрих | Левый шаблон поиска, элемент номер 2 |
13 | Пробел | Левый шаблон поиска, элемент номер 3 |
14 | Штрих | Левый шаблон поиска, элемент номер 4 (шириной один модуль) |
15 | Пробел | Левый шаблон поиска, элемент номер 5 (шириной один модуль) |
16 | Штрих | Второй знак символа, четный элемент номер 4 |
17 | Пробел | Второй знак символа, нечетный элемент номер 4 |
18 | Штрих | Второй знак символа, четный элемент номер 3 |
19 | Пробел | Второй знак символа, нечетный элемент номер 3 |
20 | Штрих | Второй знак символа, четный элемент номер 2 |
21 | Пробел | Второй знак символа, нечетный элемент номер 2 |
22 | Штрих | Второй знак символа, четный элемент номер 1 |
23 | Пробел | Второй знак символа, нечетный элемент номер 1 |
24 | Штрих | Четвертый знак символа, нечетный элемент номер 1 |
25 | Пробел | Четвертый знак символа, четный элемент номер 1 |
26 | Штрих | Четвертый знак символа, нечетный элемент номер 2 |
27 | Пробел | Четвертый знак символа, четный элемент номер 2 |
28 | Штрих | Четвертый знак символа, нечетный элемент номер 3 |
29 | Пробел | Четвертый знак символа, четный элемент номер 3 |
30 | Штрих | Четвертый знак символа, нечетный элемент номер 4 |
31 | Пробел | Четвертый знак символа, четный элемент номер 4 |
32 | Штрих | Правый шаблон поиска, элемент номер 5 (шириной один модуль) |
33 | Пробел | Правый шаблон поиска, элемент номер 4 (шириной один модуль) |
34 | Штрих | Правый шаблон поиска, элемент номер 3 |
35 | Пробел | Правый шаблон поиска, элемент номер 2 |
36 | Штрих | Правый шаблон поиска, элемент номер 1 |
37 | Пробел | Третий знак символа, четный элемент номер 4 |
38 | Штрих | Третий знак символа, нечетный элемент номер 4 |
39 | Пробел | Третий знак символа, четный элемент номер 3 |
40 | Штрих | Третий знак символа, нечетный элемент номер 3 |
41 | Пробел | Третий знак символа, четный элемент номер 2 |
42 | Штрих | Третий знак символа, нечетный элемент номер 2 |
43 | Пробел | Третий знак символа, четный элемент номер 1 |
44 | Штрих | Третий знак символа, нечетный элемент номер 1 |
45 | Пробел | Правый шаблон-ограничитель, внутренний элемент (шириной один модуль) |
46 | Штрих | Правый шаблон-ограничитель, внешний элемент (шириной один модуль) |
Таблица Е.2 - Описание элементов символа GS1 DataBar Ограниченный
_______________
См. рисунок 8 .
Номер элемента | Тип элемента | Описание элемента |
1 | Пробел | Левый шаблон-ограничитель, внешний элемент (шириной один модуль) |
2 | Штрих | Левый шаблон-ограничитель, внутренний элемент (шириной один модуль) |
3 | Пробел | Левый знак символа, элемент знака символа номер 1, нечетный элемент номер 1 |
4 | Штрих | Левый знак символа, элемент знака символа номер 2, четный элемент номер 1 |
5 | Пробел | Левый знак символа, элемент знака символа номер 3, нечетный элемент номер 2 |
6 | Штрих | Левый знак символа, элемент знака символа номер 4, четный элемент номер 2 |
7 | Пробел | Левый знак символа, элемент знака символа номер 5, нечетный элемент номер 3 |
8 | Штрих | Левый знак символа, элемент знака символа номер 6, четный элемент номер 3 |
9 | Пробел | Левый знак символа, элемент знака символа номер 7, нечетный элемент номер 4 |
10 | Штрих | Левый знак символа, элемент знака символа номер 8, четный элемент номер 4 |
11 | Пробел | Левый знак символа, элемент знака символа номер 9, нечетный элемент номер 5 |
12 | Штрих | Левый знак символа, элемент знака символа номер 10, четный элемент номер 5 |
13 | Пробел | Левый знак символа, элемент знака символа номер 11, нечетный элемент номер 6 |
14 | Штрих | Левый знак символа, элемент знака символа номер 12, четный элемент номер 6 |
15 | Пробел | Левый знак символа, элемент знака символа номер 13, нечетный элемент номер 7 |
16 | Штрих | Левый знак символа, элемент знака символа номер 14, четный элемент номер 7 |
17 | Пробел | Контрольный знак символа, элемент номер 1 |
18 | Штрих | Контрольный знак символа, элемент номер 2 |
19 | Пробел | Контрольный знак символа, элемент номер 3 |
20 | Штрих | Контрольный знак символа, элемент номер 4 |
21 | Пробел | Контрольный знак символа, элемент номер 5 |
22 | Штрих | Контрольный знак символа, элемент номер 6 |
23 | Пробел | Контрольный знак символа, элемент номер 7 |
24 | Штрих | Контрольный знак символа, элемент номер 8 |
25 | Пробел | Контрольный знак символа, элемент номер 9 |
26 | Штрих | Контрольный знак символа, элемент номер 10 |
27 | Пробел | Контрольный знак символа, элемент номер 11 |
28 | Штрих | Контрольный знак символа, элемент номер 12 |
29 | Пробел | Контрольный знак символа, элемент номер 13 (шириной один модуль) |
30 | Штрих | Контрольный знак символа, элемент номер 14 (шириной один модуль) |
31 | Пробел | Правый знак символа, элемент знака символа номер 1, нечетный элемент номер 1 |
32 | Штрих | Правый знак символа, элемент знака символа номер 2, четный элемент номер 1 |
33 | Пробел | Правый знак символа, элемент знака символа номер 3, нечетный элемент номер 2 |
34 | Штрих | Правый знак символа, элемент знака символа номер 4, четный элемент номер 2 |
35 | Пробел | Правый знак символа, элемент знака символа номер 5, нечетный элемент номер 3 |
36 | Штрих | Правый знак символа, элемент знака символа номер 6, четный элемент номер 3 |
37 | Пробел | Правый знак символа, элемент знака символа номер 7, нечетный элемент номер 4 |
38 | Штрих | Правый знак символа, элемент знака символа номер 8, четный элемент номер 4 |
39 | Пробел | Правый знак символа, элемент знака символа номер 9, нечетный элемент номер 5 |
40 | Штрих | Правый знак символа, элемент знака символа номер 10, четный элемент номер 5 |
41 | Пробел | Правый знак символа, элемент знака символа номер 11, нечетный элемент номер 6 |
42 | Штрих | Правый знак символа, элемент знака символа номер 12, четный элемент номер 6 |
43 | Пробел | Правый знак символа, элемент знака символа номер 13, нечетный элемент номер 7 |
44 | Штрих | Правый знак символа, элемент знака символа номер 14, четный элемент номер 7 |
45 | Пробел | Правый шаблон-ограничитель, знак-ограничитель, внутренний элемент (шириной один модуль) |
46 | Штрих | Правый шаблон-ограничитель, элемент - штрих (шириной один модуль или, по крайней мере, шириной пять модулей) |
47 | Пробел | Правый шаблон-ограничитель, внешний элемент (шириной пять модулей) |
Таблица Е.3 - Описание элементов символа GS1 DataBar Расширенный (в формате для шести сегментов)
_______________
* См. рисунок 11.
Номер элемента | Тип элемента | Описание элемента |
1 | Пробел | Левый шаблон-ограничитель, внешний элемент (шириной один модуль) |
2 | Штрих | Левый шаблон-ограничитель, внутренний элемент (шириной один модуль) |
3 | Пробел | Первый знак символа, нечетный элемент номер 1 (ограничен 4 модулями или менее) |
4 | Штрих | Первый знак символа, четный элемент номер 1 |
5 | Пробел | Первый знак символа, нечетный элемент номер 2 |
6 | Штрих | Первый знак символа, четный элемент номер 2 |
7 | Пробел | Первый знак символа, нечетный элемент номер 3 |
8 | Штрих | Первый знак символа, четный элемент номер 3 |
9 | Пробел | Первый знак символа, нечетный элемент номер 4 |
10 | Штрих | Первый знак символа, четный элемент номер 4 |
11 | Пробел | Шаблон поиска А1, элемент номер 1 |
12 | Штрих | Шаблон поиска А1, элемент номер 2 |
13 | Пробел | Шаблон поиска А1, элемент номер 3 |
14 | Штрих | Шаблон поиска А1, элемент номер 4 (шириной один модуль) |
15 | Пробел | Шаблон поиска А1, элемент номер 5 (шириной один модуль) |
16 | Штрих | Второй знак символа, четный элемент номер 4 |
17 | Пробел | Второй знак символа, нечетный элемент номер 4 |
18 | Штрих | Второй знак символа, четный элемент номер 3 |
19 | Пробел | Второй знак символа, нечетный элемент номер 3 |
20 | Штрих | Второй знак символа, четный элемент номер 2 |
21 | Пробел | Второй знак символа, нечетный элемент номер 2 |
22 | Штрих | Второй знак символа, четный элемент номер 1 |
23 | Пробел | Второй знак символа, нечетный элемент номер 1 (ограничен 4 модулями или менее) |
24 | Штрих | Третий знак символа, нечетный элемент номер 1 (ограничен 4 модулями или менее) |
25 | Пробел | Третий знак символа, четный элемент номер 1 |
26 | Штрих | Третий знак символа, нечетный элемент номер 2 |
27 | Пробел | Третий знак символа, четный элемент номер 2 |
28 | Штрих | Третий знак символа, нечетный элемент номер 3 |
29 | Пробел | Третий знак символа, четный элемент номер 3 |
30 | Штрих | Третий знак символа, нечетный элемент номер 4 |
31 | Пробел | Третий знак символа, четный элемент номер 4 |
32 | Штрих | Шаблон поиска В2, элемент номер 5 (шириной один модуль) |
33 | Пробел | Шаблон поиска В2, элемент номер 4 (шириной один модуль) |
34 | Штрих | Шаблон поиска В2, элемент номер 3 |
35 | Пробел | Шаблон поиска В2, элемент номер 2 |
36 | Штрих | Шаблон поиска В2, элемент номер 1 |
37 | Пробел | Четвертый знак символа, четный элемент номер 4 |
38 | Штрих | Четвертый знак символа, нечетный элемент номер 4 |
39 | Пробел | Четвертый знак символа, четный элемент номер 3 |
40 | Штрих | Четвертый знак символа, нечетный элемент номер 3 |
41 | Пробел | Четвертый знак символа, четный элемент номер 2 |
42 | Штрих | Четвертый знак символа, нечетный элемент номер 2 |
43 | Пробел | Четвертый знак символа, четный элемент номер 1 |
44 | Штрих | Четвертый знак символа, нечетный элемент номер 1 (ограничен 4 модулями или менее) |
45 | Пробел | Пятый знак символа, нечетный элемент номер 1 (ограничен 4 модулями или менее) |
46 | Штрих | Пятый знак символа, четный элемент номер 1 |
47 | Пробел | Пятый знак символа, нечетный элемент номер 2 |
48 | Штрих | Пятый знак символа, четный элемент номер 2 |
49 | Пробел | Пятый знак символа, нечетный элемент номер 3 |
50 | Штрих | Пятый знак символа, четный элемент номер 3 |
51 | Пробел | Пятый знак символа, нечетный элемент номер 4 |
52 | Штрих | Пятый знак символа, четный элемент номер 4 |
53 | Пробел | Шаблон поиска В1, элемент номер 1 |
54 | Штрих | Шаблон поиска В1, элемент номер 2 |
55 | Пробел | Шаблон поиска В1, элемент номер 3 |
56 | Штрих | Шаблон поиска В1, элемент номер 4 (шириной один модуль) |
57 | Пробел | Шаблон поиска В1, элемент номер 5 (шириной один модуль) |
58 | Штрих | Шестой знак символа, четный элемент номер 4 |
59 | Пробел | Шестой знак символа, нечетный элемент номер 4 |
60 | Штрих | Шестой знак символа, четный элемент номер 3 |
61 | Пробел | Шестой знак символа, нечетный элемент номер 3 |
62 | Штрих | Шестой знак символа, четный элемент номер 2 |
63 | Пробел | Шестой знак символа, нечетный элемент номер 2 |
64 | Штрих | Шестой знак символа, четный элемент номер 1 |
65 | Пробел | Шестой знак символа, нечетный элемент номер 1 (ограничен 4 модулями или менее) |
66 | Штрих | Правый шаблон-ограничитель, внутренний элемент (шириной один модуль) |
67 | Пробел | Правый шаблон-ограничитель, внешний элемент (шириной один модуль) |
Приложение F
(справочное)
Примеры кодирования данных
F.1 Пример кодирования данных в символах GS1 DataBar Всенаправленный и GS1 DataBar Усеченный
В символе GS1 DataBar Всенаправленный - линейном компоненте в составе символа GS1 Композитный (рисунок F.1) закодирован флаг сопровождения со значением 1, указывающий на присутствие двумерного компонента, и номер предмета торговли 24012345678905.
Рисунок F.1 - Пример символа GS1 Композитный
Этапы вычисления ширины элементов линейного компонента - символа GS1 DataBar Всенаправленный:
a) определяют значение символа как сумму значений флага сопровождения 10000000000000 и идентификационного номера 2401234567890 предмета, равную 12401234567890 (контрольный знак отбрасывают; в данном примере контрольный знак равен 5);
b) рассчитывают значения левой и правой пар знаков символа:
left = 12401234567890 div 4537077 = 2733309;
right = 12401234567890 mod 4537077 = 1170097;
c) рассчитывают значения каждого из четырех знаков символа:
data 1 = left div 1597 = 2733309 div 1597 = 1711;
data 2 = left mod 1597 = 2733309 mod 1597 = 842;
data 3 = right div 1597 = 1170097 div 1597 = 732;
data 4 = right mod 1597 = 1170097 mod 1597 = 1093;
d) рассчитывают значения для нечетного и четного поднаборов элементов для четырех знаков символа:
data 1 представляет собой значение первого знака символа со структурой (16,4) - 1711, которое находится в группе 3 с 8 нечетными и 8 четными модулями. Применяя уравнения для вычисления значений и из значения data 1, получают:
_______________
См. таблицу 1.
(data 1 - 961) div 34 = (1711 - 961) div 34 = 750 div 34 = 22;
(data 1 - 961) mod 34 = (1711 - 961) mod 34 = 750 mod 34 = 2;
data 2 представляет собой значение второго знака символа со структурой (15,4) - 842, которое находится в группе 2 с 7 нечетными и 8 четными модулями. Применяя уравнения для вычисления значений и из значения data 2, получают:
_______________
См. таблицу 2.
(data 2 - 336) div 20 = (842 - 336) div 20 = 506 div 20 = 25;
(data 2 - 336) mod 20 = (842 - 336) mod 20 = 506 mod 20 = 6;
data 3 представляет собой значение третьего знака символа со структурой (16,4) - 732, которое находится в группе 2 с 10 нечетными и 6 четными модулями. Применяя уравнения для вычисления значений и из значения data3, получают:
_______________
См. таблицу 1.
(data 3 - 161) div 10 = (732 - 161) div 10 = 571 div 10 = 57;
(data 3 - 161) mod 10 = (732 - 161) mod 10 = 571 mod 10 = 1;
data 4 представляет собой значение четвертого знака символа со структурой (15,4) - 1 093, которое находится в группе 3 с 9 нечетными и 6 четными модулями. Применяя уравнения для вычисления и из значения data 4, получают:
_______________
См. таблицу 2.
(data 4 - 1036) div 48 = (1093 - 1036) div 48 = 57 div 48 = 1;
(data 4 - 1036) mod 48 = (1093 - 1036) mod 48 = 57 mod 48 = 9;
e) применяя алгоритм кодирования ширины поднаборов элементов символа GS1 DataBar (приложение В), получают следующие значения ширины элементов (в модулях) из значений поднаборов:
для поднабора нечетных элементов 1-го знака символа:
odd 1 (для значения 22) = 3 1 1 3;
для поднабора четных элементов 1-го знака символа:
even 1 (для значения 2) = 1 1 3 3.
Таким образом, ширина элементов 1-го знака символа со значением data 1 = 3 1 1 1 1 3 3 3;
для поднабора нечетных элементов 2-го знака символа:
odd 2 (для значения 6) = 1 2 3 1;
для поднабора четных элементов 2-го знака символа:
even 2 (для значения 25) = 3 1 1 3.
Таким образом, ширина элементов 2-го знака символа со значением data 2 = 1 3 2 1 3 1 1 3 (при отображении слева направо);
для поднабора нечетных элементов 3-го знака символа:
odd 3 (для значения 57) = 3 3 3 1;
для поднабора четных элементов 3-го знака символа:
even 3 (для значения 1) = 1 1 2 2.
Таким образом, ширина элементов 3-го знака символа со значением data 3 = 3 1 3 1 3 2 1 2 (при отображении слева направо);
для поднабора нечетных элементов 4-го знака символа:
odd 4 (для значения 9) = 1 2 4 2;
для поднабора четных элементов 4-го знака символа:
even 4 (для значения 1) = 1 1 2 2.
Таким образом, ширина элементов 4-го знака символа со значением data 4 = 1 1 2 1 4 2 2 2;
f) вычисляют контрольную сумму:
_______________
См. таблицу 5.
data 1: 3·1+1·3+1·9+1·27+1·2+3·6+3·18+3·54 | =278 |
data 2: 1·4+3·12+2·36+1·29+3·8+1·24+1·72+3·58 | =435 |
data 3: 3·16+1·48+3·65+1·37+3·32+2·17+1·51+2·74 | =657 |
data 4: 1·64+1·34+2·23+1·69+4·49+2·68+2·46+2·59 | =755 ________ |
2125 |
Таким образом, контрольная сумма = 2125 mod 79 = 71;
g) вычисляют два контрольных знака символа из контрольной суммы:
71 более или равно 8, так что промежуточное значение для пары шаблонов поиска 71+1=72;
72 больше или равно 72, так что значение для пары шаблонов поиска 72+1=73;
значение левого контрольного знака равно 73 div 9 = 8;
значение правого контрольного знака равно 73 mod 9 = 1;
значению левого контрольного знака, равному 8, соответствует следующая комбинация элементов (в модулях) 1 3 9 1 1;
значению правого контрольного знака, равному 1, соответствует следующая комбинация элементов (в модулях) 3 5 5 1 1 (при отображении слева направо);
h) устанавливают ширину всех элементов символа в последовательности [левый шаблон-ограничитель, 1-й знак символа, левый контрольный знак, 2-й знак символа (зеркальное отображение), 4-й знак символа, правый контрольный знак (зеркальное отображение), 3-й знак символа (зеркальное отображение) и правый шаблон-ограничитель]):
_____________________
Значение data 1.
Левый шаблон поиска.
Значение data 2.
Значение data 4.
Правый шаблон поиска.
Значение data 3.
См. рисунок 2.
1 1, 3 1 1 1 1 3 3 3, 1 3 9 1 1, 3 1 1 3 1 2 3 1, 1 1 2 1 4 2 2 2, 1 1 5 5 3, 2 1 2 3 1 3 1 3, 1 1.
F.2 Пример кодирования данных в символе GS1 DataBar Ограниченный
В символе GS1 DataBar Ограниченный (рисунок F.2) закодирован номер предмета торговли 00098765432105.
Рисунок F.2 - Пример символа GS1 DataBar Ограниченный
Этапы вычисления ширины элементов символа GS1 DataBar Ограниченный:
a) исходя из идентификационного номера предмета торговли 00098765432105, определяют значение символа, равное 9876543210 (контрольную цифру 5 отбрасывают);
b) рассчитывают значения левого и правого знаков символа:
left data = 9876543210 div 2013571 = 4904;
right data = 9876543210 mod 2013571 = 1991026;
c) вычисляют значения четного и нечетного поднаборов элементов для двух знаков символа:
значение левого знака символа (left data), равное 4904, находится в группе 1 с 17 нечетными и 9 четными модулями, таким образом:
_______________
См. таблицу 6.
значение нечетного поднабора элементов левого знака символа:
left odd = (left data - 0) div 28 = 4904 div 28 = 175;
значение четного поднабора элементов левого знака символа:
left even = (left data - 0) mod 28 = 4904 mod 28 = 4;
значение правого знака символа (right data), равное 1991026, находится в группе 6 с 19 нечетными и 7 четными модулями, таким образом:
_______________
См. таблицу 7.
значение нечетного поднабора элементов правого знака символа:
right odd = (right data - 1979845) div 1 = 11181 div 1 = 11181;
значение четного поднабора элементов правого знака символа:
right even = (right data - 1979845) mod 1 = 11181 mod 1 = 0;
d) применяя алгоритм кодирования ширины элементов для поднаборов символа GS1 DataBar (приложение В), получают следующие размеры ширины элементов (в модулях) из значений поднаборов:
для поднабора нечетных элементов левого знака символа:
left odd (для значения 175) = 1 1 2 2 2 4 5;
для поднабора четных элементов левого знака символа:
left even (для значения 4) = 1 1 1 1 2 2 1.
Таким образом, ширина элементов левого знака символа равна 1 1 1 1 2 1 2 1 2 2 4 2 5 1;
для поднабора нечетных элементов правого знака символа:
right odd (для значения 11181) = 3 3 1 3 5 2 2;
для поднабора четных элементов правого знака символа:
right even (для значения 0) = 1 1 1 1 1 1 1.
Таким образом, ширина элементов правого знака символа равна 3 1 3 1 1 1 3 1 5 1 2 1 2 1;
e) вычисляют контрольную сумму:
_______________
По таблице 7.
значение для левого знака символа:
left=1·1+1·3+1·9+1·27+2·81+1·65+2·17+1·51+2·64+2·14+4·42+2·37+5·22+1·66=926;
значение правого знака символа:
right=3·20+1·60+3·2+1·6+1·18+1·54+3·73+1·41+5·34+1·13+2·39+1·28+2·84+1·74=995.
Следовательно, контрольная сумма = (926+995) mod 89 = 52;
f) вычисляют ширину элементов (в модулях) контрольного знака (приложение В) для значения 52 = 1 1 1 2 1 1 2 1 1 2 2 1 1 1;
g) устанавливают ширину всех элементов символа (левый шаблон-ограничитель, левый знак символа, контрольный знак, правый знак символа и правый шаблон-ограничитель):
1 1, 1 1 1 1 2 1 2 1 2 2 4 2 5 1, 1 1 1 2 1 1 2 1 1 2 2 1 1 1, 3 1 3 1 1 1 3 1 5 1 2 1 2 1, 1 1 5.
F.3 Пример кодирования данных в символе GS1 DataBar Расширенный
В символе GS1 DataBar Расширенный (рисунок F.3) закодирована строка элемента с идентификатором применения (10)12А. Данные в настоящем примере не содержат основную идентификацию предмета и являются условными.
Рисунок F.3 - Пример символа GS1 DataBar Расширенный
Этапы вычисления ширины элементов символа GS1 DataBar Расширенный:
a) определяют значение, подлежащее кодированию в символе 1012А;
b) устанавливают значения в двоичных полях:
бит флага сопровождения | = 0 (отсутствует двумерный компонент); | ||
значение метода кодирования | = 00 (отсутствует особое уплотнение AI, но некоторые AI могут быть закодированы по знакам); | ||
биты в поле символа переменной длины | = 00 (четное число знаков символа; число знаков символа менее или равно 14); | ||
биты данных: | = 0010011 (схема числового кодирования для пары цифр "10"); | ||
= 0010101 (схема числового кодирования для пары цифр "12"); | |||
= 0000 (указатель фиксации схемы алфавитно-цифрового кодирования); | |||
= 100000 (схема алфавитно-цифрового кодирования для знака "А"); | |||
= 0010000 (для заполнения поля). |
__________________
См. 7.2.5.1.
См. 7.2.5.2.
См. 7.2.5.3.
См. 7.2.5.4 и 7.2.5.5.
Таким образом, строкой данных является последовательность 000000010011001010100001000000010000;
Примечание - В данном примере описан метод кодирования, приведенный в 7.2.5.
c) строку данных разбивают на группы по 12 битов каждая: 000000010011, 001010100001 и 000000010000. Определяют значения трех знаков символа:
data 1 = 000000010011 = 19;
data 2 = 001010100001 = 673;
data 3 = 000000010000 = 16;
d) рассчитывают значения нечетного и четного поднаборов данных для трех знаков символа:
_______________
См. 7.2.5.1
значение первого знака символа (data 1) 19 находится в группе 1 с 12 нечетными и 5 четными модулями, следовательно:
значение нечетного поднабора элементов:
odd 1 = (data 1 - 0) div 4 = 19 div 4 = 4;
значение четного поднабора элементов:
even 1 = (data 1 - 0) mod 4 = 19 mod 4 = 3;
значение второго знака символа (data 2) 673 находится в группе 2 с 10 нечетными и 7 четными модулями, следовательно:
значение нечетного поднабора элементов:
odd 2 = (data 2 - 348) div 20 = 325 div 20 = 16;
значение четного поднабора элементов:
even 2 = (data 2 - 348) mod 20 = 325 mod 20 = 5;
значение третьего знака символа (data 3) 16 находится в группе 1 с 12 нечетными 5 четными модулями, следовательно
значение нечетного поднабора элементов:
odd 3 = (data 3 - 0) div 4 = 16 div 4 = 4;
значение четного поднабора элементов:
even 3 = (data 3 - 0) mod 4 = 16 mod 4 = 0;
e) применяя алгоритм кодирования ширины элементов для поднаборов символа GS1 DataBar (приложение В), получают следующие размеры ширины элементов из значений поднаборов:
для поднабора нечетных элементов 1-го знака символа:
odd 1 (для значения 4) = 1 1 7 3;
для поднабора четных элементов 1-го знака символа:
even 1 (для значения 3) = 2 1 1 1.
Таким образом, ширина элементов первого знака символа (в модулях) равна 1 2 1 1 7 1 3 1 (зеркальное отображение слева направо);
для поднабора нечетных элементов 2-го знака символа:
odd 2 (для значения 16) = 1 5 1 3;
для поднабора четных элементов 2-го знака символа:
even 2 (для значения 5) = 1 2 2 2.
Таким образом, ширина элементов второго знака символа (в модулях) равна 1 1 5 2 1 2 3 2;
для поднабора нечетных элементов 3-го знака символа:
odd 3 (для значения 4) = 1 1 7 3;
для поднабора четных элементов 3-го знака символа:
even 3 (для значения 0) = 1 1 1 2.
Таким образом, ширина элементов третьего знака символа (в модулях) равна 1 1 1 1 7 1 3 2 (зеркальное отображение слева направо);
f) вычисляют контрольную сумму:
_______________
См. таблицу 14.
значение для первого знака символа:
data 1 = 1·1+2·3+1·9+1·27+7·81+1·32+3·96+1·77=1007;
значение для второго знака символа:
data 2 = 1·20+1·60+5·180+1·118+1·143+2·7+3·21+2·63=1562;
значение для третьего знака символа:
data 3 =1·189+1·145+1·13+1·39+7117+1·140+3·209+2·205= 2382.
Значение контрольной суммы = (1007+1562+2382) mod 211 = 98;
g) вычисляют значение контрольного знака символа: 211(4-4)+98=98.
_______________
В данном примере число знаков символа для данных с учетом контрольного знака равно 4.
Значения нечетного и четного поднаборов для контрольного знака символа:
_______________
См. таблицу 8.
Значение контрольного знака, равное 98, находится в группе 1 с 12 нечетными и 5 четными модулями, таким образом:
значение нечетного поднабора элементов:
odd с = (значение контрольного знака) div 4 = 98 div 4 = 24;
значение четного поднабора элементов:
even с = (значение контрольного знака) mod 4 = 98 mod 4 = 2.
Используя алгоритм расчета ширины элементов в поднаборах для символа GS1 DataBar Расширенный (приложение В), получают следующие размеры ширины элементов (в модулях):
в нечетном поднаборе odd с (для значения 24) = 1 5 1 5;
в четном поднаборе even с (для значения 2) = 1 2 1 1.
Таким образом, ширина элементов контрольного знака, в модулях равна 1 1 5 2 1 1 5 1;
h) устанавливают ширину всех элементов символа (левый шаблон-ограничитель, контрольный знак, шаблон поиска А1, первый знак символа (со значением data 1) (зеркальное отображение), второй знак символа (со значением data 2), шаблон поиска А2, третий знак символа (со значением data 3) (зеркальное отображение) и правый шаблон-ограничитель):
1 1, 1 1 5 2 1 1 5 1, 1 8 4 1 1, 1 3 1 7 1 1 2 1, 1 1 5 2 1 2 3 2, 1 1 4 8 1, 2 3 1 7 1 1 1 1, 1 1.
Приложение G
(справочное)
Программа декодирования ширины элемента на языке программирования С
#include <stdio.h> | |||||||
/**************************************************************** | |||||||
* Две подпрограммы - elements() и elementsExp() -- | |||||||
* входные данные: | |||||||
* eDist[] = первые нормированные (2*K)-2 значения "от края до подобного края" | |||||||
* (всегда начиная с внешнего шаблона поиска!!) и | |||||||
* N и K, определяющие структуру знака, | |||||||
* выходные данные: | |||||||
* widths [] = 2*K размеры ширины элементов. | |||||||
* | |||||||
* Для символов GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный вызов: | |||||||
* elements (*eDist,*widths, 15,4) внутренних знаков символа & | |||||||
* elements (*eDist,*widths,16,4) для внешних знаков символа. | |||||||
* | |||||||
* Для GS1 DataBar Ограниченный вызов elements (*eDist, *widths,26,7). | |||||||
* | |||||||
* Для GS1 DataBar Расширенный вызов elementsExp (*eDist, *widths,17,4). | |||||||
* | |||||||
****************************************************************************/ | |||||||
/*************************************************************************** | |||||||
* подпрограмма elements() определяет ширину элементов знака (n,k) при по крайней мере одном | |||||||
* элементе с четным номером шириной ровно один модуль. | |||||||
* (Примечание - Элементы с четными номерами - 2-й, 4-й, 6-й и т.д. имеют нечетные индексы). | |||||||
*************************************************************************/ | |||||||
void elements (int *eDist, int *widths, int N, int K) { | |||||||
int i; | |||||||
int minEven; | |||||||
int barSum; | |||||||
/* получение размеров ширины элементов из нормированных измерений "от края до подобного края"*/ | |||||||
minEven = 10; /* начинают с завышенного наименьшего значения */ | |||||||
barSum = widths [0] = 1; /* сначала предполагают, что ширина первого штриха равна 1 модулю*/ | |||||||
for (i = 1; i<K*2-2; i+=2) { | |||||||
widths[i] = eDist[i-1] - widths[i-1]; | |||||||
widths[i+1] = eDist[i] - widths[i]; | |||||||
barSum += widths[i] + widths[i+1]; | |||||||
if (widths[i] < minEven) minEven = widths[i]; | |||||||
} | |||||||
widths[K*2-1] = N - barSum; /* ширина последнего четного элемента составляет N модулей */ | |||||||
if (widths[K*2-1] < minEven) minEven = widths[K*2-1]; | |||||||
if (minEven > 1) { | |||||||
/* минимальная четная ширина четного элемента слишком большая, следует откорректировать ее на 1 */ | |||||||
for (i = 0; i<K*2; i+= 2) { | |||||||
widths[i] += minEven-1; | |||||||
widths[i+1] -= minEven-1; | |||||||
} | |||||||
} | |||||||
return; | |||||||
} | |||||||
/************************************************************************* | |||||||
* подпрограмма elementsExp() определяет ширину элементов знака (n,k) | |||||||
* при по крайней мере одном элементе с нечетным номером шириной ровно один модуль | |||||||
* (Примечание - Элементы с нечетными номерами - 1-й, 3-й, 5-й и т.д. имеют четные индексы) | |||||||
*************************************************************************/ | |||||||
void elementsExp (int *eDist, int *widths, int N, int K) { | |||||||
int i; | |||||||
int minOdd; | |||||||
int barSum; | |||||||
/* получение размеров ширины элементов из нормированных измерений "от края до подобного края"*/ | |||||||
minOdd = 8; /* начинают с минимума == предполагаемая ширина первого элемента */ | |||||||
barSum = widths[0] = 8; /* сначала предполагают, что ширина первого штриха максимальная/8 модулей */ | |||||||
for (i = 1; i<K*2-2; i+=2) { | |||||||
widths[i] = eDist[i-1] - widths[i-1]; | |||||||
widths[i+1] = eDist[i] - widths[i]; | |||||||
barSum += widths[i] + widths[i+1]; | |||||||
if (widths[i+1] < minOdd) minOdd = widths[i+1]; | |||||||
} | |||||||
widths[K*2-1] = N - barSum; /* последний четный элемент составляет N модулей */ | |||||||
if (minOdd > 1) { | |||||||
/* минимальная ширина нечетных элементов слишком велика, следует уточнить, чтобы минимальная ширина нечетных элементов составляла 1 */ | |||||||
for (i = 0; i<K*2; i+=2) { | |||||||
widths[i] -= minOdd-1; | |||||||
widths[i+1] += minOdd-1; | |||||||
} | |||||||
} | |||||||
return; | |||||||
} | |||||||
/************************************************************************** | |||||||
* пример () демонстрирует подпрограммы "elements" для GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный, GS1 DataBar Ограниченный и GS1 DataBar Расширенный. | |||||||
**************************************************************************/ | |||||||
void main (void) { | |||||||
int eDist14[6] = { 5,3,3,3,4,5}; | |||||||
int eDistLim[12] = { 2,3,4,3,4,4,6,6,2,2,3,4 }; | |||||||
int eDistExp[6] = { 2,3,3,3,3,3}; | |||||||
int widths[14]; | |||||||
int i; | |||||||
/* для внешнего знака символа символов штрихового кода GS1 DataBar Всенаправленный, GS1 | |||||||
DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный r */ | |||||||
elements(eDist14, widths, 16,4); | |||||||
printf("\n GS1 DataBar (16,4) elements: "); | |||||||
for (i = 0; i < 8; i++) printf("%d ", widths[i]); | |||||||
/* для внутреннего знака символа символов штрихового кода GS1 DataBar Всенаправленный, GS1 | |||||||
DataBar Усеченный, GS1 DataBar Двустрочный или GS1 DataBar Двустрочный Всенаправленный r */ | |||||||
elements(eDist14, widths, 15,4); printf("\n GS1 DataBar (15,4) elements: "); | |||||||
for (i = 0; i < 8; i++) printf("%d ", widths[i]); | |||||||
/* для GS1 DataBar Ограниченный */ | |||||||
elements(eDistLim, widths, 26,7); | |||||||
printf("\n GS1 DataBar Limited elements: "); | |||||||
for (i = 0; i < 14; i++) printf("%d ", widths[i]); | |||||||
/* для GS1 DataBar Расширенный */ | |||||||
elementsExp(eDistExp, widths, 17,4); | |||||||
printf("\n GS1 DataBar Expanded elements: "); | |||||||
for (i = 0; i < 8; i++) printf("%d ", widths[i]); | |||||||
printf("\n"); | |||||||
return; | |||||||
} |
Приложение Н
(справочное)
Рекомендации по минимизации ошибок при считывании
Н.1 Основные положения
Все версии символов GS1 DataBar (кроме GS1 DataBar Ограниченный) разработаны для обеспечения возможности сканирования по сегментам, каждый из которых содержит шаблон поиска и смежный знак символа. Некоторые сканеры могут требовать декодирования отдельных сегментов для обеспечения эффективного всенаправленного сканирования. Для таких сканеров важно свести к минимуму возможность возможность* ошибочного считывания ненадлежащего сегмента (например, обнаруженного в графическом изображении или в несоответствующей месте в пределах символа).
_______________
* Текст документа соответствует оригиналу. - .
Кроме того, для всех типов сканеров и всех типов символов GS1 DataBar (включая GS1 DataBar Ограниченный) из-за того, что значение контрольного знака может быть получено в большей степени из значений ширины элементов, чем из значений знаков символа, существует вероятность того, что при наличии двух ошибок смещения края в пределах одного знака символа эти ошибки могут быть не обнаружены, что повлечет за собой ошибочное считывание символа.
На рисунке Н.1 приведен пример двух необнаруженных ошибок смещения края в символе GS1 DataBar Всенаправленный. Верхний символ - первоначальный символ, который был сканирован, и нижний символ - реконструированный на основе данных, декодированных в результате ошибочного считывания верхнего символа.
Рисунок Н.1 - Два действительных символа GS1 DataBar Всенаправленный, отличающиеся только двумя смещенными краями внутри одного знака символа
Указанные особенности символики GS1 DataBar требуют введения дополнительных мер повышения надежности, связанных с необходимостью сбора избыточных данных. Рекомендуется использовать нижеуказанные алгоритмы, хотя приемлемы и иные алгоритмы, которые обеспечивают подобный уровень надежности.
Н.2 Декодирование с подсчетом
a) Схема алгоритма декодирования с подсчетом
При обработке каждой линии сканирования подсчитывают число случаев декодирования какого-либо значения-кандидата в каждой позиции сегмента (или символа GS1 DataBar Ограниченный в целом). Для каждой позиции сегмента ведут отдельные списки значений-кандидатов (до 24 для GS1 DataBar Расширенный, один для GS1 DataBar Ограниченный и четыре для всех других).
После обработки каждой линии сканирования выбирают (для каждой позиции сегмента или символа GS1 DataBar Ограниченный в целом) значение-кандидат, которое было декодировано чаще других, независимо от того, какие еще сегменты были обнаружены вдоль этой линии сканирования. Необходимо, чтобы число декодирований подходящего значения-кандидата на позицию сегмента (или символа GS1 DataBar Ограниченный в целом), по меньшей мере, на два превышало число декодирований следующего за ним подходящего значения-кандидата. Если в данной позиции было декодировано только одно значение-кандидат, необходимо, чтобы оно было декодировано по крайней мере дважды.
Для символа GS1 DataBar Ограниченный указанное требование подразумевает, что символ должен быть декодирован с одним и тем же значением по крайней мере дважды.
b) Пример
Пусть в символе GS1 DataBar Всенаправленный закодированы следующие значения знаков символа - А, В, С и D. Результатом первого сканирования стали знаки АВ, второго - BCD, третьего - D и четвертого - ABC. Таким образом, все четыре знака были считаны дважды, следовательно декодирование может быть продолжено.
Теперь вместо этого допустим, что четвертое сканирование привело к результату ABE, где Е - иное значение для третьего знака. Теперь ошибочно считано значение третьего знака символа. Следует продолжить сканирование до тех пор, пока число считываний одного из значений-кандидатов на третий знак не будет на два более, чем другое (или другие).
Продолжая этот пример, допустим, что в результате следующего сканирования были получены ABC, и следующего за ним сканирования - FBC, где F - иное значение для первого знака. Третий знак теперь определен как С, поскольку его значение было считано три раза, а значение Е - только один раз (на два считывания меньше).
Последнее сканирование привело к ошибочному считыванию первого знака. Однако поскольку значение А уже было распознано три раза, a F только один, первый знак может быть принят как А (даже несмотря на то, что последнее сканирование отличалось от большинства предыдущих), поэтому процесс декодирования может быть продолжен, если контрольный знак рассчитан в соответствии со значением, закодированным в шаблоне поиска.
Н.3 Построчное декодирование
Если обычное использование сканера предусматривает такую ориентацию сканера, при которой линии сканирования проходят вдоль всего символа или отдельной строки символа, то дополнительно к декодированию с подсчетом, приведенному в Н.2, рекомендуется использовать дополнительные меры защиты. Декодер должен воспринимать только данные, которые заключены, по меньшей мере, в двух смежных сегментах, т.е. в последовательности "шаблон поиска - знак символа - знак символа - шаблон поиска" или "знак символа - шаблон поиска - знак символа". Таким образом, изолированные последовательности "шаблон поиска - знак символа" следует игнорировать.
Н.4 Проверки постоянства
Разработчики сканеров должны предусматривать реализацию проверок постоянства размеров (ширины) от знака к знаку символа и растискивания печатной краски, особенно если дизайн позволяет декодирование линий сканирования, которые охватывают отдельные сегменты (знак данных с шаблоном поиска).
a) Проверка размеров (ширины)
Проверяют, чтобы отношения размера четырех выбранных элементов шаблона поиска и размера примыкающего знака символа к номинальным значениям отличались не более чем на 7%. (В число четырех выбираемых элементов шаблона поиска не включают внешний элемент в паре из двух узких элементов, т.е. для размера знака символа в шаблоне поиска с шириной элементов {1, 5, 7, 1, 1} выбирают первые четыре элемента).
b) Проверка растискивания краски
Проверяют, чтобы среднее отклонение от номинального значения ширины штрихов в шаблоне поиска не отличалось более чем на 0,3Х от среднего отклонения штрихов в примыкающем к нему знаке символа.
Н.5 Рекомендации по декодированию символа GS1 DataBar Ограниченный
Настоящий стандарт устанавливает дополнительные новые требования к штрихам шаблонов - ограничителей GS1 DataBar Ограниченный для обеспечения печати и декодирования с целью предотвращения возможного ошибочного считывания некоторых символов UPC-A в качестве символов GS1 DataBar Ограниченный.
Н.5.1 Рекомендации относительного исходного рекомендуемого алгоритма декодирования, касающиеся штрихов шаблонов-ограничителей
Исходный рекомендуемый алгоритм декодирования не требует присутствия штрихов шаблонов-ограничителей для проведения декодирования. Однако необходима проверка наличия надлежащих знаков-ограничителей. Кроме того, необходима проверка присутствия широкого пробела, расположенного слева от начального штриха шаблона - ограничителя символа.
На рисунке 8(а) приведен исходный символ DataBar Ограниченный, содержащий следующие шаблоны-ограничители:
- левый шаблон-ограничитель, состоящий из пробела шириной по меньшей мере в один модуль и штриха шириной в один модуль;
- правый шаблон-ограничитель, состоящий из пробела шириной в один модуль и штриха шириной по меньшей мере в один модуль. Следует обратить внимание на то, что светлое поле, примыкающее к шаблону-ограничителю, изображенное на рисунке 8(а) и более явно изображенное на рисунке 8(b), не является частью шаблона-ограничителя исходного символа GS1 DataBar Ограниченный.
Н.5.2 Возможное ошибочное считывание символа UPC-A
Перевернутый вверх символ GS1 DataBar Ограниченный может совпадать с комбинацией штрихов и пробелов в пределах символа UPC-A, что может быть причиной случайного "ошибочного считывания" (т.е. сканирования символа UPC-A с использованием рекомендуемого алгоритма декодирования, изначально установленного для символики GS1 DataBar Ограниченный, послужит причиной допустимого декодирования символа GS1 DataBar Ограниченный). Полученные в результате декодированные данные будут представлять допустимое, но отличающееся от закодированного в символе UPC-A значение глобального номера предмета торговли GTIN).
Существует "проблемный" символ со значением 1332350 внутри символа UPC-A, начинающегося со знаков символа, представляющих значения 2, 4, 7 и 9 (т.е. соответствующих префиксам предприятий GS1 02, 04, 07 и 09). Примеры каждого прецедента приведены на рисунке Н.2 вместе с соответствующим символом GS1 DataBar Ограниченный, который может быть ошибочно считан. Ошибочное считывание может произойти с одним из указанных символов или с подобными символами, которые превращаются в один из таких символов при ошибке края.
Рисунок Н.2 - Прецеденты для символов UPC-A (с префиксами 09, 07, 04 и 02), которые могут быть источником проблем
Н.5.3 Методы предотвращения ошибочного считывания символов UPC-A
В рекомендуемый алгоритм декодирования GS1 DataBar Ограниченный включены три метода, приведенные в настоящем стандарте. Эти методы содержатся в пересмотренном рекомендуемом алгоритме декодирования, установленном в 6.2.6 настоящего стандарта. Комбинирование этих методов должно эффективно устранить возможность ошибочного считывания символов UPC-A. Эти методы или подобные им должны быть реализованы в сканерах для GS1 DataBar Ограниченный.
Н.5.3.1 Мероприятие 1
Исходным рекомендуемым алгоритмом декодирования не предусмотрена проверка внутренних элементов шаблонов-ограничителей.
В качестве примера следует рассмотреть правый шаблон-ограничитель, расположенный с левой стороны перевернутого вверх символа GS1 DataBar Ограниченный, приведенного на рисунке Н.3. В шаблоне-ограничителе узкий пробел всегда имеет ширину в один модуль.
Примечание - Следует обратить внимание на то, что соответствующий пробел в проблемном символе UPC-A имеет ширину 2 модуля.
Рисунок Н.3 - Прецедент для символа с префиксом 02 (аналогичен для символа с префиксом 04)
Проверка внутренних элементов существующего шаблона-ограничителя исключает из проблемного списка все символы UPC-A, начинающиеся с знаков символа со значениями 2 и 4.
Н.5.3.2 Мероприятие 2
Верхний символ GS1 DataBar Ограниченный в изображенной паре, существующий на законном основании, был ошибочно считан с использованием исходного рекомендуемого алгоритма декодирования как изображенный снизу символ UPC-A. Правый шаблон-ограничитель, расположенный с левой стороны символа GS1 DataBar Ограниченный на рисунке Н.4, представлен сочетанием узкий пробел - штрих неопределенной ширины, означающим что пробел всегда имеет ширину 1Х, а штрих может иметь любую ширину.
Рисунок Н.4 - Прецедент для символа с префиксом 07 (аналогичен для символа с префиксом 09)
Дополнительное требование к шаблонам-ограничителям о присутствии в их составе пробела шириной 1Х, штриха шириной 1Х и пробела шириной 5Х должно исключить из проблемного списка все символы UPC-A, начинающиеся со знаков символа со значениями 7 и 9, без ущерба для существующих принтеров и почти для всех существующих символов.
Это требование, однако, сказывается на некоторых уже напечатанных символах - тех, которые напечатаны на номинально темном фоне и в которых конечный штрих шаблона-ограничителя может сливаться с фоном, как это было допустимо в первоначальной спецификации. Такие символы в дальнейшем не должны декодироваться как символы GS1 DataBar Ограниченный, а новые символы должны производиться с конечным пробелом в качестве последнего элемента правого шаблона-ограничителя.
Такие или эквивалентные им проверки должны проводиться всеми сканерами, которые реализуют возможность декодирования символов GS1 DataBar Ограниченный.
Н.5.3.3 Мероприятие 3
Это мероприятие предотвращает ошибочное считывание в случае неполного сканирования части символа UPC-A, которая представляется содержащей символ GS1 DataBar Ограниченный с широким начальным штрихом в шаблоне-ограничителе, обнаруживая присутствие знаков символа UPC-A на другом конце линии сканирования, как показано на рисунке Н.5.
Рисунок Н.5 - Прецедент для символа с префиксом 07 (аналогичен для символа с префиксом 09), когда линия сканирования проходит через верхний край символа
Рекомендуемый алгоритм декодирования должен быть откорректирован для осуществления проверки окончания символа UPC-A (т.е. левого окончания символа GS1 DataBar Ограниченный) с целью исключения неполных сканирований, приводящих к ошибочному считыванию во вновь разрабатываемых сканерах.
Декодер должен обнаруживать наличие по крайней мере 10 элементов слева от декодируемого символа GS1 DataBar Ограниченный. В случае их присутствия декодер должен признать недействительным сканирование, если первые 8 элементов (включая начальный штрих шаблона - ограничителя GS1 DataBar Ограниченный) декодируются как два действительных знака правого окончания символа UPC-A.
Н.5.3.4 Выводы
Выполнение мероприятия 1 эффективно решает проблему с символами UPC-A, начинающимися со знаков символа со значениями с 2 и 4.
Выполнение мероприятия 2 эффективно решает проблему с символами UPC-A, начинающимися со знаков символа со значениями с 7 и 9.
Выполнение мероприятия 3 эффективно решает проблему сканирований под углом и неполных сканирований и придает дополнительную надежность вдобавок к мероприятиям 1 и 2.
С помощью модификации символов и рекомендуемого алгоритма декодирования, приведенными в настоящем подразделе, проблема возможного ошибочного считывания символов UPC-A эффективно решена с минимальным ущербом для уже существующих реализаций GS1 DataBar Ограниченный. Почти все существующие символы GS1 DataBar Ограниченный могут быть считаны сканерами, которые выполняют эти дополнительные проверки, потому что пробелы в новых шаблонах-ограничителях, как правило, уже присутствуют при их нанесении на светлую подложку.
Большую часть изготовителей принтеров штрихового кода или разработчиков программного обеспечения, генерирующего графическое представление символов штрихового кода, указанные модификации не затронут.
Примечание - Изменения могут потребоваться для принтеров и/или программного обеспечения для нанесения светлого поля, примыкающего к шаблону-ограничителю, в случае печати символов на темной подложке.
Это приводит к возникновению новых требований к маркировке упаковки, исключающих появление каких-либо меток вблизи правой части символа (по крайней мере, на расстоянии 5Х). Предполагается, что большинство существующих символов GS1 DataBar Ограниченный уже удовлетворяет этим требованиям.
Приложение I
(справочное)
Рекомендации по печати символов
I.1 Рекомендации для шаблона-ограничителя
Символы GS1 DataBar первого и третьего типов начинаются и заканчиваются шаблоном-ограничителем, который состоит из светлого и темного элементов шириной один модуль каждый. Из-за отсутствия свободной зоны в символе внешний элемент шаблона-ограничителя может визуально сливаться с фоном в том случае, если их цвета совпадают (светлый цвет слева или темный справа). Необходимо обеспечить присутствие в символе внешних элементов. Например, на рисунках 2, 8 и 11 светлые внешние элементы шаблона-ограничителя визуально неотличимы от фона, однако присутствуют в символе.
Новый, расположенный слева шаблон-ограничитель символа GS1 DataBar Ограниченный, в отличие от указанного в первой редакции настоящего стандарта, состоит из одного светлого элемента шириной один модуль и одного темного элемента шириной один модуль, а расположенный справа шаблон-ограничитель состоит из трех элементов: светлого - шириной один модуль, темного - шириной один модуль и светлого - шириной пять модулей. Внешние светлые элементы могут сливаться с фоном и быть неразличимы на светлом фоне. Обязательным требованием является присутствие в символе внешних пробелов шаблона-ограничителя, поскольку сканеры требуют их наличия.
Ни один из символов GS1 DataBar не допускает инвертирования цветов штрихов и пробелов. То есть штрихи должны быть темными, а пробелы - светлыми. Сканеры не должны предпринимать попыток декодирования комбинаций штрихов и пробелов в случае их инвертирования, поскольку инвертированный символ GS1 DataBar может быть ошибочно считан.
I.2 Печать пиксельных (растровых) изображений
Графическое программное обеспечение, используемое для создания символов штрихового кода с помощью устройств печати пиксельных (растровых) изображений, должно обеспечивать масштабирование каждого штриха и пробела в точном соответствии с размером пикселя применяемого принтера. Для символик, декодируемых на основе измерений "от края до подобного края", в состав которых входят все символики семейства GS1 DataBar, число пикселей в составе каждого знака символа должно быть фиксированным целым числом, кратным числу модулей в символе или в знаке символа. Таким образом, конкретное устройство печати может воспроизвести только определенный диапазон размеров X. В ISO/IEC 15419 приведены общие требования к цифровым системам создания изображений и печати символов штрихового кода.
Компенсация единообразного приращения (или сокращения) размеров символов штрихового кода должна быть обеспечена путем смещения на одно и то же значение ширины всех штрихов и пробелов символа. Это может быть достигнуто путем замены целого числа темных пикселей на светлые или светлых на темные единообразно для каждой пары "штрих - пробел" в символе и для последнего штриха в символе. Например, во всех пикселях у одного и того же края каждого штриха символа может быть проведена смена цвета с темного на светлый или у пикселей по обоим краям каждого штриха символа может быть заменен цвет с темного на светлый при условии, что разрешающая способность устройства печати допускает такую замену. Любой порядок замены цвета пикселей темного на светлый или светлого на темный является приемлемым, если корректировка выполняется единообразно по всему символу и не приводит к изменению размеров "от края до подобного края" или общей ширины знака символа. Невыполнение указанных правил приводит к ухудшению качества печати символов и в большинстве случаев приводит к невозможности их считывания.
Программное обеспечение общего назначения для печати, предназначенное для широкого спектра устройств печати, должно обеспечивать возможность корректировки пользователем размера X и ширины штрихов.
Пример для программистов
В файлах цифрового изображения символов штрихового кода указанные принципы могут быть сведены к следующим правилам:
a) преобразуют желаемое увеличение символа или размера X до размера модуля в пикселях, округляя до ближайшего целого значения. Если результат приводит к размеру X, меньшему минимального допустимого в рамках данного применения, то следует округлить его до ближайшего большего целого значения;
b) определяют число пикселей, соответствующее требуемой компенсации ширины штриха для единообразного приращения ширины штрихов и округляют до ближайшего большого целого значения;
c) применяют полученные результаты для определения числа пикселей в каждом штрихе и пробеле символа.
Пример
Используя файлы цифрового изображения символов штрихового кода для вывода на устройство печати с разрешающей способностью 24 точки/мм, формируют символ с размером X 0,27 мм и уменьшением ширины штриха на 0,06 мм.
Размер модуля, равный 24 точки/мм 0,27 мм/модуль = 6,5 пикселей, округляют до значения 6 пикселей на модуль.
Компенсацию ширины штриха, равную 0,06 мм 24 пикселя/мм = 1,4 пикселя, округляют до 2 пикселей.
В результате получают число пикселей в штрихах и пробелах, приведенное в таблице 1.1.
Таблица I.1 - Пример корректировки числа пикселей с учетом разрешающей способности устройства печати и сокращения ширины штриха
Число модулей | Число пикселей | |
в штрихах | в пробелах | |
1 | 4 | 8 |
2 | 10 | 14 |
3 | 16 | 20 |
4 | 22 | 26 |
I.3 Рекомендации для пользователей программного обеспечения по печати пиксельных изображений
При первоначальной печати символа в системе, состоящей из программного обеспечения для печати символов штрихового кода и печатающего устройства, пользователь согласно ISO/IEC 15416 должен проверить соответствие символа, предназначенного для печати, требуемому классу качества печати и размеру X. Если напечатанный символ не соответствует требуемому классу качества, пользователь может увеличить размер X или изменить приращение или сокращение ширины штриха. Данная процедура может продолжаться до тех пор, пока не будет достигнут требуемый класс качества символа. Следует учитывать, что не все системы печати могут обеспечить создание символов штрихового кода требуемого качества при малых значениях размера X.
I.4 Рекомендации по управлению процессом печати
Для управления процессом печати рекомендуется проводить оценку среднего приращения или сокращения ширины штриха, а также корректировки для их соответствующей компенсации. Параметр "декодируемость", измеряемый в соответствии с ISO/IEC 15416, зависит от двух факторов: систематического приращения или сокращения ширины штриха и от вариации размеров "от края до подобного края".
I.5 Расстояние между символами
Символы GS1 DataBar должны находиться на таком расстоянии друг от друга, которое обеспечивает присутствие в поле зрения сканера только одного символа.
I.6 Печать шаблона - разделителя строк
Если символ GS1 DataBar наносят как линейный компонент с соответствующим флагом сопровождения, одновременно должен быть напечатан необходимый шаблон - разделитель строк. Символ считают недействительным до тех пор, пока не будет напечатан двумерный компонент.
В некоторых процедурах печати могут возникнуть трудности при нанесении рядов шаблона - разделителя строк высотой один модуль в связи с искажением некоторых элементов шаблона - разделителя строк из-за размывания или растекания красителя.
Для того чтобы заранее компенсировать вертикальное искажение в процессе печати, уменьшают соответствующим образом высоту штрихов элементов шаблона - разделителя строк до тех пор, пока все элементы шаблона - разделителя строк не будут визуально различимы.
Если шаблон - разделитель строк по-прежнему визуально неразличим, то высоту каждого ряда в шаблоне - разделителе строк увеличивают до двух модулей (максимальное значение), при этом высота символа также должна быть увеличена. В этом случае высота знаков символа не должна быть менее установленного минимального размера. Если после указанных действий шаблон - разделитель строк остается визуально неразличимым, то увеличивают размер X символа, при этом высота и ширина символа также должны быть соответственно увеличены.
Приложение J
(справочное)
Сводный перечень параметров символики GS1 Data Bar
Таблица
Параметры символики | Типы символов | ||||||
GS1 DataBar Всенаправ- | GS1 DataBar Усеченный | GS1 DataBar Двустрочный | GS1 DataBar Двустрочный Всенаправ- | GS1 DataBar Ограниченный | GS1 DataBar Расширенный | GS1 DataBar Расширенный Многострочный | |
Всенаправленное сканирование | Присутствует | Отсутствует | Отсутствует | Присутствует | Отсутствует | Присутствует | Отсутствует |
Левый/Правый шаблоны- | s:b/s:b | s:b/s:b | s:b/b:s | s:b/b:s | s:b / s:b:s | Переменный | Переменный |
Данные для передачи | Аl(01) вместе с 14-разрядным GTIN | Аl(01) вместе с 14-разрядным GTIN | Аl(01) вместе с 14-разрядным GTIN | Аl(01) вместе с 14-разрядным GTIN | Аl(01) вместе с 14-разрядным GTIN | Основная идентификация и другие строки элементов c AI | Основная идентификация и другие строки элементов c AI |
Максимальная емкость данных | 16 цифр (неизменная) | 16 цифр (неизменная) | 16 цифр (неизменная) | 16 цифр (неизменная) | 16 цифр (неизменная) | 74 цифры/ | 74 цифры/ |
Кодируемый набор знаков | 0-9 | 0-9 | 0-9 | 0-9 | 0-9 | Поднабор по ISO/IEC646 | Поднабор nolSO/IEC646 |
Поддерживаемые значения разряда индикатора | 0-9 | 0-9 | 0-9 | 0-9 | 0,1 (только) | 0-9 | 0-9 |
Число знаков символа для данных/ шаблонов поиска | 4/2 | 4/2 | 4/2 | 4/2 | 2/1 | 4/2-22/11 | 4/2-22/11 |
Число строк | 1 | 1 | 2 | 2 | 1 | 1 | 2-11 |
Структура символа (области) | d1/lf/d2/4d/rf/d3 | d1/lf/d2/d4/rf/d3 | d1/lf/d2 | d1/lf/d2 | Id/ck/rd | Последова- | Последова- |
Число элементов | 46 | 46 | Верхняя строка: 25 | Верхняя строка: 25 | 47 | Переменное | Переменное |
Число модулей | 96 | 96 | Верхняя строка: 50 | Верхняя строка:50 | 79 | Переменное | Переменное |
Минимальная высота символа | 33Х | 13Х | 13Х | 69Х | 10Х | 34Х | 71Х (для 2 строк) |
Максимальная высота символа | Не установлена | 33Х | 13Х | Не установлена | Не установлена | Не | Не |
Примечание 1 - Левый (или верхний левый) шаблон-ограничитель - пробел/штрих; правый шаблон-ограничитель - пробел/штрих. Следовательно, первый (крайний слева) элемент символа - ПРОБЕЛ. Примечание 2 - Большинство форматов символов GS1 DataBar кодируют только обозначение предмета Аl(01). Форматы символов GS1 DataBar Расширенный обеспечивают основную идентификацию, например с идентификатором применения AI(01), AI(8004) и строки элементов с прочими AI. Примечание 3 - Форматы символов GS1 DataBar, за исключением символа GS1 DataBar Расширенный, позволяют кодировать только 10 цифр. Форматы символов GS1 DataBar Расширенный допускают кодирование следующих знаков: 0 - 9, А - Z, а - z, 21 специальный графический знак, знак пунктуации и FCN1 (функциональный знак 1). Примечание 4 - В разряде индикатора символа GS1 DataBar Ограниченный допускаются только цифры 0 и 1. Во всех остальных форматах символов GS1 DataBar разряд 9 зарезервирован для тары, содержащей смешанные предметы торговли. Примечание 5 - Область - это комбинация элементов со специальной функцией, например, шаблон-ограничитель, знак символа или шаблон поиска. Сокращения: d1 - первый знак символа; If - левый шаблон поиска; d2 - второй знак символа; d4 - четвертый знак символа; rf - правый шаблон поиска; d3 - третий знак символа; Id - левый знак символа; сk - контрольный знак символа; rd - правый знак символа. Все символы начинаются и заканчиваются шаблоном-ограничителем. Примечание 6 - Элементы - это штрихи и пробелы, каждый из которых состоит из определенного числа модулей. Примечание 7 - Модуль - это ширина самого узкого штриха и самого узкого пробела, также называемая "размер X". Ширину символа также определяют в размерах X. Примечание 8 - В соответствии с таблицей 13. |
Приложение ДА
(справочное)
Сведения о системе GS1
GS1 - международная организация, управляющая системой кодирования идентификационных номеров, которая ранее находилась в ведении международных организаций EAN International и Uniform Code Council.
Система GS1 действует через сеть национальных и многонациональных агентств, называемых национальными организациями GS1. В наименовании национальной организации после аббревиатуры GS1 следует наименование (обозначение) страны, например GS1 France или GS1 US. Идентификационные номера GS1 наиболее широко применяют для идентификации продукции, однако их можно использовать для идентификации других предметов в пределах существующих правил системы GS1.
Одно из основных правил идентификации заключается в том, что применяемые номера являются незначащими, т.е. сам по себе номер не несет никакой информации о предмете, который он идентифицирует. Он не идентифицирует ни страну происхождения, ни поставщика, ни тип или цену предмета.
Однако номера составлены так, что они позволяют осуществлять административный контроль системы и обеспечивают уникальность номеров в мировом масштабе.
Требования по применению приведены в [4] и предоставляются национальными организациями GS1.
_______________
Наименования и адреса национальных организаций GS1, действующих в странах - членах МГС, приведены в приложении ДБ.
Адресные реквизиты головного офиса GS1:
GS1
Blue Tower
Avenue Louise, 326
BE 1050 Brussels
Belgium
Tel: + 32 2 788 78 00
www.gs1.org
Приложение ДБ
(справочное)
Перечень национальных организаций GS1 в странах - членах МГС
На территории стран - членов Межгосударственного Совета по стандартизации, метрологии и сертификации на момент принятия настоящего стандарта действуют национальные организации GS1, сведения о которых приведены в таблице ДБ.1.
Таблица ДБ.1 - Наименования и адреса национальных организаций GS1, действующих на территории стран - членов МГС
Краткое наименование страны по | Наименование национальной организации | Адрес, телефон, факс, e-mail, веб-сайт организации | |
международное (на английском языке) | на русском языке | ||
Азербайджан | GS1 Azerbaijan | GS1 Азербайджан | AZ1010 г.Баку, ул.Уз. Гаджибекова, 41, офис 62-63. Тел. + 99412 4987405. Факс: + 99412 4981058. E-mail: ean@gs1az.org web site: http://www.gs1az.org |
Армения | GS1 Armenia | GS1 АРМЕНИЯ | 0033 г.Ереван, пр-т Баграмяна, 64/15. Тел. +374 10 272 622. Факс: +374 10 271 186. E-mail: gs1arm@gs1am.org web site: http://www.gs1am.org |
Беларусь | GS1 Belarus | Ассоциация автоматической идентификации ГС1 Бел. | 220033 г.Минск, ул.Судмалиса, 22. Тел. /факс: + 375 17 298 09 13; 298 06 60; 298 89 52. E-mail: ean@bas-net.by, ean@ean.by web site: http://www.ean.by |
Грузия | GS1 Georgia | GS1 ГРУЗИЯ | 0179 г.Тбилиси, пр-т Чавчавадзе, 50. Тел.+ 995 32 29 47 24. Факс: + 995 32 25 39 73. E-mail: info@gs1ge.org web site: http://www.gs1ge.org |
Казахстан | GS1 Kazakstan | GS1 КАЗАХСТАН | г.Алматы, ул.Байзакова, 299. Тел.+ 7 7272 479348; 473116. Факс: + 7 7272 474241; 75-59-32. E-mail: info@gs1.kz web site: http://www.gs1.kz |
Кыргызстан | GS1 Kyrgyzstan | Ассоциация предметной нумерации GS1 Кыргызстан | 720064 г.Бишкек, ул.Ахунбаева, 42а, 3-й этаж. Тел.+996 312 51 08 25. Факс: +996 312 51 29 14. E-mail: info@gs1kg.org web site: http://www.gs1kg.org |
Молдова | GS1 Moldova | Национальная Ассоциация Автоматической Идентификации GS1 МОЛДОВА | MD 2009 г.Кишинев, ул.М. Когалничану, 63, офис 52. Тел.+ 373 22 24 5329. Факс: + 373 22 24 1669. E-mail: info@gs1md.org web site: http://www.gs1md.org |
Российская Федерация | GS1 Russia | Ассоциация автоматической идентификации "ЮНИСКАН/ ГС1 РУС" | 119415 Москва, а/я 4. Тел.+ 7 495 730 7103. Факс: +7 495 730 7105. Е-mail: info@gs1ru.org web site: http://www.gs1ru.org |
Таджикистан | GS1 Tajikistan | GS1 Таджикистан | 734012 г.Душанбе, ул.Валаматзаде, 21. Тел. - Факс: - Е -mail: gs1centre@mail.ru web site: - |
Узбекистан | GS1 Uzbekistan | GS1 УЗБЕКИСТАН | 100047 г.Ташкент, ул.Бухара, 6. Тел.+998 71 236 71 31; +998 71 236 78 28. Факс: +998 71 236 79 46. E-mail: info@gs1uz.org web site: http://www.gs1uz.org |
Украина | GS1 Ukraine | Ассоциация товарной нумерации Украины "ДжиЭс1 Украина" | 04053 г.Киев, ул.Артема, 26. Тел.(380 44)569 3281. Факс: (380 44) 569 3279. E-mail: info@ean.ua web site: http://www.gs1ua.org |
Примечания 1 В Туркменистане на момент принятия настоящего стандарта национальная организация GS1 отсутствовала. 2 На территории страны действует только одна национальная организация, указанная в настоящей таблице, официально представляющая международную организацию GS1. |
Приложение ДВ
(справочное)
Сведения о соответствии ссылочных международных стандартов межгосударственным и национальным стандартам
Таблица ДВ.1
Обозначение ссылочного | Степень | Обозначение и наименование соответствующего |
ISO/IEC 646 | NEQ | ГОСТ 27463-87 Системы обработки информации. 7-битные кодированные наборы символов |
ISO 4217 | - | * |
ISO/IEC 15416 | IDT | ГОСТ ISO/IEC 15416-2009* "Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация испытаний символов штрихового кода для оценки качества печати. Линейные символы" |
________________ * Вероятно, ошибка оригинала. Следует читать ГОСТ ISO/IEC 15416-2019. - . | ||
ISO/IEC 15417 | IDT | ГОСТ ISO/IEC 15417-2003* "Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода Code 128" |
________________ * Вероятно, ошибка оригинала. Следует читать ГОСТ ISO/IEC 15417-2013. - . | ||
ISO/IEC 15420 | IDT | ГОСТ ISO/IEC 15420-2010 "Автоматическая идентификация. Кодирование штриховое. Спецификация символики штрихового кода EAN/UPC" |
ISO/IEC 19762-1 | IDT | ГОСТ Р ИСО/МЭК 19762-1-2011 "Информационные технологии. Технологии автоматической идентификации и сбора данных (АИСД). Гармонизированный словарь. Часть 1. Общие термины в области АИСД" |
ISO/IEC 19762-2 | IDT | ГОСТ Р ИСО/МЭК 19762-2-2011 "Информационные технологии. Технологии автоматической идентификации и сбора данных (АИСД). Гармонизированный словарь. Часть 2. Оптические носители данных (ОНД)" |
ISO/IEC 24723 | - | * |
* Соответствующий межгосударственный стандарт отсутствует. До его принятия рекомендуется использовать перевод на русский язык данного международного стандарта. Примечание - В настоящей таблице использованы следующие условные обозначения степени соответствия стандартов: - IDT - идентичные стандарты; - NEQ - неэквивалентный стандарт. |
Библиография
[1] | ISO/IEC 15419 | Information technology - Automatic identification and data capture techniques - Bar code digital imaging and printing performance testing (Информационные технологии. Технологии автоматической идентификации и сбора данных. Эксплуатационные испытания при цифровом создании изображений и печати штрихового кода) | |
[2] | ISO/IEC 15424 | Information technology - Automatic identification and data capture techniques - Data Carrier Identifiers (including Symbology Identifiers)) (Информационные технологии. Технологии автоматической идентификации и сбора данных. Идентификаторы носителей данных (включая идентификаторы символик)) | |
[3] | ISO/IEC 15418 | Information technology - Automatic identification and data capture techniques - GS1 Application Identifiers and ASC МН10 Data Identifiers and maintenance (Информационные технологии. Технологии автоматической идентификации и сбора данных. Идентификаторы применения GS1 и идентификаторы данных ASC МН10 и порядок их ведения) | |
[4] | GS1 General Specifications | GS1, Brussels, Belgium (Общие спецификации GS1 (GS1, Брюссель, Бельгия)) |
УДК 681.5.015:621.3:006:354 | МКС 01.080.50; | |
Ключевые слова: информационные технологии, технологии автоматической идентификации и сбора данных, спецификация символики штрихового кода GS1 DataBar, знак данных, формат символа, качество печати, алгоритм обнаружения ошибок |
Электронный текст документа
и сверен по:
, 2020