l:href='#_ftn947'>[947] было опубликовано исследование ученых-специалистов В. Ахрамеева и И. Башкирова о наличии трех шестерок в штрих –кодах EAN-13/UPC, ставшее, пожалуй, наиболее доступным для читателей среди всех подобного рода исследований. Работа эта получила в печати высокую оценку, была признана технически корректной, а ее выводы – доказательными и обоснованными[948].
На эту работу не только часто ссылаются: кажется, что именно ее появление прекратило дискуссии о наличии шестерок в штрих-коде ЕАН. Все как будто согласились: «Да, теперь доказано: шестерки – есть».
Что же было сделано В. Ахрамеевым и И. Башкировым?
В работе содержится анализ материалов ГОСТа Р 51201-98 «Требования к символике ЕАН/ЮПиСи». К этому ГОСТу и ранее обращались другие авторы, писавшие о штрих-коде ЕАН[949] . Указывая на табл.4.1 и 4.2 ГОСТа (таблицы кодирования информационных и вспомогательных знаков), они утверждали, что вспомогательные знаки не тождественны знаку цифры 6, содержащей большее число пробелов. Споря с этими авторами, В. Ахрамеев и И. Башкиров рассмотрели процедуру декодирования, приведенную в п.4.6 ГОСТа, применили ее к вспомогательным знакам, получили в результате декодирования цифру '6' и пришли к выводу о тождественности вспомогательных знаков знаку цифры шесть.
Однако исследование В. Ахрамеева и И. Башкирова представляется нам ошибочным. Мы попробуем это показать и исправить допущенную ими «техническую» ошибку, не меняя при этом самого способа доказательства, предложенного ими, а только скорректировав его.
Но сначала приведем полностью соответствующее место из труднодоступного, малотиражного ГОСТа, чтобы читатели могли сами получить представление об описанном в нем алгоритме и проверить правильность всех приводимых далее умозаключений и выкладок.
'4.6 Рекомендуемый алгоритм декодирования Системы считывания штриховых кодов на основе соответствующих алгоритмов декодирования позволяют считывать символы, параметры которых отличны от номинальных. В этом разделе рассмотрен алгоритм декодирования, используемый для установления допусков Те, Тb, Тр[950].
Для каждого знака символа принимают измеренную ширину знака равной S. Значение S используют для определения базовых пороговых (RT) значений. Индивидуальные измерения от кромки одного штриха до соответствующей кромки следующего штриха (е) сравнивают с базовым пороговым значением (RT), чтобы определить значение Е.
Значение e1 по определению представляет собой расстояние от передней кромки штриха до передней кромки соседнего штриха, а значение е2 – измеренное расстояние от задней кромки штриха до задней кромки соседнего штриха.
Базовые пороговые значения RT1, RT2, RT3, RT4 и RT5 представлены следующим образом:
RT1=(1, 5/7)S;
RT2=(2, 5/7)S;
RT3=(3, 5/7)S; (1)
RT4=(4, 5/7)S;
RT5=(5, 5/7)S.
Внутри каждого знака измеренные значения e1 и е2 сравниваются с базовыми пороговыми. Соответствующие интегральные значения измерений Е1 и Е2 считаются равными 2, 3, 4 или 5, как показано ниже:
RTKei<RT2, Ei=2;
RT2<ei<RT3, Ei=3; (2)
RT3<ei<RT4, Ei=4;
RT4<ei<RT5, Ei=5.
В противном случае знак является ошибочным. Определенные таким образом значения Е1 и Е2 должны соответствовать значениям, установленным в таблице 4.10 для соответствующих знаков'.
В приведенной выше процедуре определения параметров Ei расстояния и интервалы фактически измеряются в единицах ширины одного модуля, и систему неравенств можно переписать в эквивалентном и, как нам кажется, более наглядном виде:
1, 5<ei/m<2, 5;Ei=2;
2, 5<ei/m<3, 5; Ei=3; (3)
3, 5<ei/m<4, 5; Ei=4;
4, 5<ei/m<5, 5; Ei=5.
где i=1,2; m=S/7 – ширина модуля знака символа,
Итак, алгоритм декодирования, изложенный ГОСТом, предписывает следующие действия:
1. Измерение ширины знака S;
2. Определение ширины модуля m=S/7;
3. Измерение величин e1, e2, в1, в2; где в1 и в2 – ширина штриховых элементов знака;
4. Определение отношений e1/m; e2/m; (в1+ в2)/m[951];
5. Определение параметров Е1 и Е2 – в зависимости от того, в какой интервал попадают значения e1/m и е2/m;
6. Определение знака данных по табл.4.10 по параметрам Е1 и Е2. В некоторых случаях необходимо использовать дополнительный параметр («вторичный детерминант») (в1+в2)/m.
На эту последовательность действий мы будем ссылаться в дальнейшем следующим образом: «п... Алгоритма»
Что же сделали авторы рассматриваемого исследования? Решив сравнить результаты декодирования вспомогательных знаков и знака цифры '6' с одинаковой шириной модуля m=1, они сразу обратились к п. З Алгоритма. Заметив, что далее при декодировании использовались только два измеренных значения – расстояния e1 и е2, авторы сделали такой вывод: «для распознавания используется толькоширина обоих штрихов знака и пробела между ними. Все пробелы, подчеркиваем – все, находящиеся за пределами этих двух штрихов, составляющих знак, просто игнорируются алгоритмом распознавания! Следуя ГОСТу…, подсчитывается параметр e1, равный расстоянию от передней кромки первого штриха до передней кромки второго штриха знака; параметр е2, равный расстоянию от задней кромки первого штриха до задней кромки второго штриха; иногда еще требуется сумма ширин первого и второго штрихов»; и что имеет значение только 'знак «штрих-пробел-штрих» (все – шириной в один «модуль» [952] ); количество пробелов справа и слева от знака – по вкусу (они все равно не участвуют в декодировании)'.
Далее авторы для знака цифры '6' и для вспомогательных знаков при m=1 (не объяснив, как они получили это значение) выполнили все действия, предусмотренные Алгоритмом, начиная с п. З, и получили для всех знаков: e1=2; e2=2; Е1=2; Е2=2. По табл.4.10 определили значение знака данных: '6' – одно и то же и для всех знаков, и сделали вывод: алгоритм декодирования ГОСТа единственным образом распознает вспомогательные знаки как цифру '6'. Этот результат они и ожидали получить в соответствии со своим общим (и ошибочным) выводом: «все пробелы, лежащие за пределами трех элементов знака Ш П Ш игнорируются алгоритмом декодирования».
Авторы упоминают только e1 и е2, но ведь для декодирования необходимо знать их относительные значения: e1/m и е2/m. А для их определения необходимо знать значение ширины модуля m. Но как его узнать? Это же не универсальная константа вроде постоянной Планка. Ширина модуля разная не только для разных этикеток со штрих-кодом – она меняется даже в пределах одного и того же символа за счет искажений, возникающих при считывании его сканером (например, если этикетка находится на цилиндрической поверхности), и даже в пределах одного и того же знака символа. Но в этом последнем случае считают, что на протяжении знака она меняется незначительно, и полагают m=S/7, где S – ширина информационного знака символа, состоящего из 7 модулей. И такое определение m в реальных считывающих устройствах проводится для каждого знакасимвола[953]. Оно