Устройство считывания должно поддерживать дополнительный вариант обработки для эмуляции символики. Этот режим обеспечивает эмуляцию символики GS1-128 при передаче данных в соответствии с Общими спецификациям GS1. Идентификатор символики должен быть представлен как «]С1». Если длина символа GS1 DataBar Расширенный более 48 знаков данных, то передачу данных осуществляют в двух сообщениях. Каждое сообщение должно иметь префикс идентификатора символики «]С1» и не должно содержать более 48 знаков данных. Сообщения должны быть разбиты на две строки элементов (приложение D).
Представление для визуального чтения
При печати символа данные представления для визуального чтения должны быть расположены под соответствующим символом и напечатаны удобным для восприятия шрифтом. Спецификации по применению GS1 устанавливают дополнительные требования к представлению для визуального чтения.
Минимальная и максимальная ширина модуля (X)
Минимальное и максимальное значения размера X должны быть установлены в стандартах по применению.
РазмерХ должен быть постоянным на всем протяжении данного символа. При наличии связи сдву- мерным компонентом символ GS1 DataBarдолжен иметь одинаковый сним размерХ.
Параметры, устанавливаемые исходя из заданного применения
Параметры, связанные с содержанием данных, размерХ, минимальная высота символа, минимальный класс качества символа, тип символа, размещение символа и прочие необходимые прикладные параметры устанавливаются 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
113 1
12 12
122 1
13 11
2 112
2 12 1
22 1 1
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 |