Устройство считывания должно поддерживать дополнительный вариант обработки для эмуляции сим­волики. Этот режим обеспечивает эмуляцию символики GS1-128 при передаче данных в соответствии с Общими спецификациям GS1. Идентификатор символики должен быть представлен как «]С1». Если длина символа GS1 DataBar Расширенный более 48 знаков данных, то передачу данных осуществляют в двух сообщениях. Каждое сообщение должно иметь префикс идентификатора символики «]С1» и не должно содержать более 48 знаков данных. Сообщения должны быть разбиты на две строки элементов (приложе­ние D).

  1. Представление для визуального чтения

При печати символа данные представления для визуального чтения должны быть расположены под соответствующим символом и напечатаны удобным для восприятия шрифтом. Спецификации по примене­нию GS1 устанавливают дополнительные требования к представлению для визуального чтения.

  1. Минимальная и максимальная ширина модуля (X)

Минимальное и максимальное значения размера X должны быть установлены в стандартах по приме­нению.

РазмерХ должен быть постоянным на всем протяжении данного символа. При наличии связи сдву- мерным компонентом символ GS1 DataBarдолжен иметь одинаковый сним размерХ.

  1. Параметры, устанавливаемые исходя из заданного применения

Параметры, связанные с содержанием данных, размерХ, минимальная высота символа, минималь­ный класс качества символа, тип символа, размещение символа и прочие необходимые прикладные пара­метры устанавливаются 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».



Контрольную цифру GS1 всегда указывают в представлении для визуального чтения, устройство декоди­рования должно обеспечить ее передачу даже в том случае, если эта цифра не закодирована в явном виде в символах GS1 DataBar.

Приложение В
(обязательное)

Программа кодирования и декодирования ширины элементов
на языке программирования С

В каждом подмножестве со структурой (n,k) значениям символа присваивают комбинации размеров эле­ментов (различной ширины). Подпрограмма кодирования getRSSwidths на языке программирования С вычисля­ет размер (ширину) элементов для заданного значения подмножества. Подпрограмма декодирования getRSSvalue на языке программирования С вычисляет подмножество значений при заданных размерах элементов. Последо­вательные значения присваивают размерам поднабора элементов в установленном порядке.

Примечание — В программе на языке С использованы первоначальные идентификаторы, включаю­щие в себя аббревиатуру «RSS». В программу на языке С не были внесены изменения, для того чтобы избежать внесения технических изменений в доступное к открытому доступу программное обеспечение.

Последовательность размеров элементов начинают с присвоения элементам с наименьшими номерами в поднаборах размера, равного одному модулю, или наименьшего размера, подходящего для данного поднабора (в соответствии с первой комбинацией под номером 0, всем ее элементам, кроме последнего, должен быть присвоен размер, равный одному модулю, если при этом для последнего элемента не будет превышено ограничение максимального размера элемента). Последующие значения присваивают следую­щей действительной комбинации, которая обеспечивает наименьшие размеры (самые узкие) из возможных для элементов с младшими номерами. Например, поднабор из 6 модулей содержит значения с номерами от 0 до 9 и соответствующие комбинации размеров элементов:

Значение Комбинация размеров

(ширина) элементов

0 1113

1 1122

  1. 113 1

  2. 12 12

  3. 122 1

  4. 13 11

  5. 2 112

  6. 2 12 1

  7. 22 1 1

  8. 3 111

Комбинации с элементами, ширина которых превышает максимально допустимую (переменная maxWidth), пропускают. Кроме того, исключают шаблоны, в которых отсутствуют элементы шириной один модуль (переменная noNarrow = 0).

* getRSSwidths

  • подпрограмма генерации размеров (ширины) элементов GS1 DataBar для заданного значения.

&

  • Calling arguments (аргументы вызова):

  • val = задаваемое значение

  • п = число модулей

  • elements = число пар элементов в наборе (для GS1 DataBar Всенаправленный, GS1 DataBar Усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Расширенный = 4;

GS1 DataBar Ограниченный = 7)

  • maxWidth = максимальная ширина элемента в модулях

  • noNarrow = 0 пропуск шаблонов, не имеющих элементов шириной один модуль

*

  • Return (возвращаемое значение):

  • static int widths[ ] = размеры ( ширина) элементов

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★I void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow)

int bar;

int elmWidth;

int і;

int mxwelement;

int subVai, lessVal;

int narrowMask = 0;

for (bar = 0; bar < elements-1; bar++)

for (elmWidth = 1, narrowMask |= (1 «bar);

elmWidth++, narrowMask &= ~(1«bar))

/* получение всех комбинаций */

subVai = combins(n-elmWidth-1, elements-bar-2);

/* исключение комбинаций с отсутствием элементов шириной один модуль */

if ((inoNarrow) && (narrowMask == 0) &&

(n-elmWidth-(elements-bar-l) >= elements-bar-1))

subVai -= 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);

subVai -= lessVal * (elements-1-bar);

else if (п-elmWidth > maxWidth)

subVai--;

val -= subVai;

if (val < 0) break;

val += subVai;

n -= elmWidth;

widths[bar] = elmWidth;

widths[bar] = n;

return;

y****^****^****^****^****^****^****^****^****^****^****^****^****^****^

  • getRSSvalue

  • подпрограмма вычисления подмножества значений при заданных размерах (ширине) элементов.

*

  • Calling arguments (аргументы вызова):

  • widths[] = заданные размеры (ширина) элементов

  • elements = число пар элементов в наборе (для GS1 DataBar Всенаправленный, GS1 DataBar усеченный, GS1 DataBar Двустрочный, GS1 DataBar Двустрочный Всенаправленный и GS1 DataBar Расширенный = 4; GS1 DataBar ограниченный = 7);

  • maxWidth = максимальная ширина элемента в модулях

  • noNarrow = 0 пропуск шаблонов, не имеющих элементов шириной один модуль

*

  • Return (возвращаемое значение):

  • Значения подмножества

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ I

int getRSSvalue (int widths[], int elements, int maxWidth, int noNarrow)

int val = 0;

int n;

int bar;

int elmWidth;

int i;

int mxwElement;

int subVai, lessVal;

int narrowMask = 0;

for (n = і = 0; і < 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*/ subVai = combins(n-elmWidth-1, elements-bar-2); /* исключение комбинаций с отсутствующими узкими элементами */

if ((inoNarrow) && (narrowMask == 0) &&

(n-elmWidth-(elements-bar-1 )>= elements-bar-1))

subVai -= 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);

subVai -= lessVal * (elements-1-bar);

else if (п-elmWidth > maxWidth)

subVai—;

val += subVal;

n -= elmWidth;

return (val);

y* Ar ★★★★★★ ★★★★★★ ★★★★★★★ Ar ★★★★★★ ★★★★★★ ★★★★★★★ Ar ★★★★★★ ★★★★★★ ★★★★★★★★★★ Ar Ar Ar Ar Ar Ar

  • компоновка (n,r): возврат множества комбинаций г, выбираемых из п:

  • Комбинации = п! / ((п - г)! * г!)

АгАг АгАг Аґ АгАг АгАг Аґ АгАг АгАг Аґ АгАг АгАг Аґ АгАг Аг АгАґ АгАг Аг АгАґ АгАг Аг АгАґ АгАг Аг АгАґ АгАг Аг АгАґ АгАг Аг АгАґ АгАг Аг АгАґ АгАг Аг АгАг АгАг Аг АгАг АгАг Аг АгАг I

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; і > maxDenom; І-) { val *= i;

if (j <= minDenom) {

val /= j;

for (; j <= minDenom; j++) { val/= j;

return (val)

;



Приложение С
(обязательное)

Ширина элементов контрольного знака
в символах GS1 DataBar Ограниченный

Значе­ние

После- до- ватель- ность1)

Ширина элементов в знаке символа (от крайнего левого пробела до крайнего правого штриха), модули


S1

В1

S2

В2

S3

вз

S4

В4

S5

В5

S6

Вб

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



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