"Святая Успенская Киево-Печерская Лавра"
Главная » Статьи » Покаяния » Покаяния и мытарства

ШТРИХ-КОД И ЧИСЛО 666
Предлагаемое исследование показывает, каким образом в штрих-коде EAN-13/UPС «спрятано» число шестьсот шестьдесят шесть (не «три шестерки», а именно число). Оно находится в самом «сердце» кода – в кодировочной таблице, устанавливающей соответствие между арабскими цифрами и штрих-знаками. При этом двойные штрихи знаков-ограничителей не имеют в данном случае к этому числу никакого отношения. 

Рассмотрите таблицу на следующем листе. Каждой арабской цифре сопоставлена тройка штрих-знаков (соответственно из наборов С, А и В). В конкретном экземпляре кода – «штакетнике» на упаковке какого-нибудь товара – для кодирования цифры применяется тот или иной из тройки в зависимости от того, в каком месте «штакетника» эта цифра располагается. В приложении перечислены основные принципы построения таблицы. Но нас интересует только кодировочная таблица сама по себе. Главный факт, на который следует обратить внимание: соответствие между 10-ю арабскими цифрами и 10-ю тройками штрих-знаков устанавливается принципиально произволением разработчиков, и не связано с функциональными свойствами системы. Итак, в таблице арабские цифры расположены в естественном для них порядке. В каком же порядке расставлены против них тройки штрих-знаков? Ответить на этот вопрос помогут следующие замечания.

Каждый штрих-знак состоит их двух штрихов различной ширины. В зависимости от того, какой из них шире, можно говорить, что он имеет ориентацию, правую или левую (если штрихи равной ширины, то говорим, что ориентация отсутствует). Например:

— это левая ориентация. Обозначим ее условно «0».

— это правая ориентация. Обозначим ее условно «1».

— ориентация отсутствует.

 

Ориентация, как характеризующий параметр штрих-знаков, была выбрана для рассмотрения по следующим соображениям:

1. Это «естественный» параметр (штрих-знак состоит из двух штрихов различной ширины, что, естественно, располагает сравнить их между собой).

2. Это объективный параметр.

3. Это «удобочитаемый» параметр (то есть легко определяется визуально).

4. Это целостный параметр (то есть относится ко всему знаку в целом, а не к одной какой-либо составляющей в отдельности).

5. Это «равновесный» параметр (в каждом столбце поровну «правых» и «левых» знаков).

Теперь перепишем таблицу, заменив штрих-знаки их ориентациями:

Чтобы при помощи понятия ориентации охарактеризовать в целом тройку штрих-знаков, кодирующую арабскую цифру, просуммируем их ориентации, и занесем результат в столбец S на соответствующей строке. И так просуммируем всю таблицу.

Для ориентаций следует употреблять свойственное им (как и всем аналогичным «симметрично-бинарным» объектам) особое суммирование, которое выглядит так:

0+0=0

0+1=1

1+0=1

1+1=0

Для удобства понимания, функцию суммирования можно представить как логическое тождество: « X есть Y » (при этом « 0 » понимается как «истина», а « 1 » – как «ложь»). Тогда табличка функции будет иметь следующий вид:

«истина есть истина» = «истина»

«истина есть ложь» = «ложь»
«ложь есть истина» = «ложь»
«ложь есть ложь» = «истина»


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

Итак, видим, что штрих-знаки (соответственно их ориентациям) расположены в порядке столбца S: 1010011010

Напомним, что это условные обозначения ориентаций, а не цифры. Но почему бы, на самом деле, не попробовать интерпретировать получившийся ряд как запись некоего числа в двоичной, допустим, системе счисления: 1010011010 ?

Поясним, как читается число в двоичной системе счисления. Ряд цифр (в двоичной системе это могут быть только 0 и 1) соответствует ряду степеней числа 2, считая от нулевой степени по порядку справа налево. Эти два ряда почленно перемножаются и суммируются. Например, двоичная запись 1010011010 читается так: 

1* 29 + 0* 28 + 1* 27 + 0* 26 + 0* 25 + 1* 24 + 1* 23 + 0* 22 + 1* 21 + 0* 20 =

= 1* 512 + 0* 256 + 1* 128 + 0* 64 + 0* 32 + 1* 16 + 1* 8 + 0* 4 + 1* 2 + 0* 1 =

= 512 + 128 + 16 + 8 + 2 = 666

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

ПРИЛОЖЕНИЕ

Кодировочная таблица штрих-кода EAN-13/UPC с пояснениями для более внимательного ознакомления:

Каждый штрих-знак есть ряд из 7-и модулей, черных или белых.
Модуль – это вертикальная полоса единичной ширины.
2. Каждый штрих-знак есть пара штрихов, разной или одинаковой ширины, и пара соответствующих пробелов.
Штрих – это несколько слившихся черных модулей (от 1 до 4-х).
Пробел – это несколько слившихся белых модулей (от 1 до 4-х).
3. Два крайних модуля любого штрих-знака обязательно разные.
(Черный и белый).
4. Существует ровно 40 штрихзнаков, удовлетворяющих условиям 1–3, причем они распределяются по 10 на 4-е набора (сета): С, А, В, и С*.
Последний в коде не употребляется и потому в таблице не представлен.
5. Все штрих-знаки сетов С и В имеют четное количество черных модулей. 
Все штрих-знаки сетов А и С* имеют нечетное количество черных модулей.
6. Сеты С и В состоят каждый из 32 черных модулей (считая вместе черные модули всех 10-ти знаков сета), сеты А и С* – из 38 черных модулей.
7. Каждый штрих-знак из сета С имеет инверсную пару себе из сета А, причем единственную (второй знак в строке таблицы).
Инверсия – это превращение позитива в негатив: черные модули становятся белыми, а белые, наоборот, черными.
8. Каждый штрих-знак из сета С имеет симметричную пару себе из сета В, также единственную (третий знак в строке таблицы).
Симметрия – это зеркальное отражение: «право» и «лево» меняются местами. 
9. Сет С*, симметричный сету А и инверсный сету В, при построении таблицы (и вообще в коде) не используется.
10. Указанные выше 9 условий задают таблицу размера 10 х 3 вполне однозначно с точностью до перестановки строк.
Иными словами – любая другая таблица, построенная в соответствии с условиями 1–9, будет отличаться от настоящей только порядком расстановки строк.
11. Не нарушая корректности кодирования, можно игнорировать пробел, находящийся «сбоку» от двух штрихов. Тогда каждый штрих-знак представляется в виде: 
« штрих ширины N1 – пробел ширины N2 – штрих ширины N3 ».

Для сохранения корректности кодирования требуется выполнение одного условия: по любому штрих-знаку (в конкретном изображении штрих-кода на упаковке товара) должны вполне однозначно определяться цифра, соответствующая этому штрих-знаку, и его сет. И это действительно выполняется, если учесть, что графическое совпадение возможно только для знаков из сетов В и С, а они находятся всегда в разных половинах «штакетника», в левой (В) и правой (С).

Итак, можно убедиться, что разработчики системы штрих-кода EAN-13/UPC произвольно установили соответствие между арабскими цифрами и штрих-знаками таким образом, что ориентации этих знаков складываются в запись (двоичную) числа шестьсот шестьдесят шесть.

При всех возможных расстановках троек штрих-знаков в таблице кода, вероятность получения в столбце S указанной последовательности составляет 1/126 , то есть менее 0,8%.

Комментарии для математиков

Понятие ориентации можно формально ввести и для неориентированных знаков, усвоив такому знаку ориентацию «соседнего» (в строке таблицы) ориентированного знака. Это формальное пополнение не меняет столбца S. Потому что по модулю 2 для любого Х: Х+Х+Х=Х. Пополненная таблица ориентаций такова:

Обозначения « 0 » и « 1 » для ориентаций – условны. Вместо них можно использовать пару любых других знаков « l » и « r » , в том числе те же самые « 1 » и « 0 » в обратном порядке. Столбец или строка S есть ряд условных знаков « rlrllrrlrl ». Как бы «догадавшись», мы субъективно интерпретируем этот ряд как ряд цифр 0 и 1, изображающий запись числа в двоичной системе счисления. В позиционной записи ряд цифр, изображающий число, обрывается слева всегда на ненулевой цифре, поэтому первый слева знак « r » мы интерпретируем как не-ноль, то есть – как цифру 1. Соответственно « l » – как цифру 0. И весь ряд – как 1010011010. Все это рассуждение, конечно, имелось в виду, когда для обозначения правой и левой ориентаций выбирались « 0 » и « 1 », но было опущено для компактности изложения.

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

f ( l , l ) = f1 где f1, f2, f3, f4 – либо l, либо r. 
f ( l , r ) = f2
f ( r , l ) = f3
f ( r , r ) = f4
Возможны 16 вариантов этой функции в зависимости от значений f1, f2, f3, f4: 

Варианты 1 и 16 сразу отбрасываются, так как это просто константы. Остальные «отбраковываются» по двум признакам:


3,4,5,6,11,12,13,14 не удовлетворяют условию f ( l , r ) = f ( r , l ) .

2,3,5,8,9,12,14,15 дискриминируют одно из двух значений ориентации, чего не должно быть, потому что «правая» и «левая» ориентации принципиально «равночестны».

Заметим, что условие f ( l , r ) = f ( r , l ) – коммутативность – вытекает из принципов построения таблицы кода, а именно, последовательность трех сетов A, B и C не имеет естественной упорядоченности (в отличие от последовательности арабских цифр), то есть нельзя не-субъективно назвать один из сетов «первым», другой – «вторым», и оставшийся – «третьим». Поэтому и тройка штрих-знаков (соответственно, сетов А, В, С) для конкретной цифры тоже неупорядочена, и суммировать ее ориентации следует вне зависимости от порядка штрих-знаков в строке таблицы.


Остаются варианты 7 и 10, тождественные с точностью до переименования « l » и « r », о чем шла речь в комментарии 2. (Нетрудно убедиться также, что суммирование таблицы при помощи любой из этих двух функций дает в результате один и тот же столбец S). Итак, функция суммирования определяется вполне однозначно.

4. Число 666 в двоичной записи обладает интересным свойством: оно инвариантно относительно композиции инверсии и симметрии. Действительно,
1010011010 ® инверсия® 0101100101 ® симметрия® 1010011010
Напомним, что инверсия и симметрия использованы также при построении таблицы штрих-кода.

Категория: Покаяния и мытарства | Добавил: pinpopov (28.07.2008) | Автор: Игорь Попов E W
Просмотров: 3627 | Рейтинг: 5.0/9
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]