От Иван
К All  
Дата 27.12.2000 02:34:21
Рубрики Прочее;

Алгоритм раскодирования штрих-кода без использования сканера (с картинками)

Алгоритм для декодирования штрих-кода без использования сканера

Итак, берем любой штрих-код системы EAN-13 и отрезаем у него нижнюю половинку, для наглядности.  Например, вот этот:

Отсчитываем слева (или справа по два штриха и объединяем штрихи в пары, вот так:

Получаем 15 пар штрихов, внешне совершенно похожих, например, на равноправные "буквы" какого-нибудь штрихового "алфавита".  Перенумеруем их слева направо.

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

Итак, вот эта таблица декодирования:

N Пара штрихов Двоичное представление пары Декодирование для пар 1-7 Декодирование для пар 2-15 set (A|B)
1 101 6 6 B
2 1001  8 8 B
3 1011 9 9 A
4 1101 0 0 A
5 10001 7 7 B
6 10011 2 2 A
7 10111 9 4 B
8 11001 1 1 A
9 11011 2 2 B
10 11101 4 9 B
11 100111 0 0 B
12 100001 3 3 B
13 100011 4 4 A
14 100111 5 5 -
15 101111 6 6 A
16 110001 5 5 A
17 110011 1 1 B
18 110111 8 8 A
19 111001 5 0 B
20 111011 7 7 A
21 111101 3 3 A

Таблица 1 (декодирования пар штрихов)

По таблице находим, что наши 15 пар штрихов однозначно декодируются как 15-значное число 644900060009966.

Теперь восстановим недостающую 16-ю скрытую цифру.  Сделать это на основе анализа штрих-кодов (примеров) не так просто, для этого уже нужна таблица из ГОСТ-а, например вот такая:

Ответ Раскодированные пары штрихов
2 3 4 5 6 7
0 А А А А А А
1 А А В А В В
2 А А В В А В
3 А А В В В А
4 А В А А В В
5 А В В А А В
6 А В В В А А
7 А В А В А В
8 А В А В В А
9 А В В А В А

Таблица 2 (восстановления скрытого числа)

В ячейке таблицы стоит A или B — это тип сета (последняя колонка таблицы 1)

Итак, для нашего случая (он выделен серым) поучаем недостающую цифру 5. 

Итого получается 16-значное число 5644900060009966

Теперь можно вернуться к нашему штрих-коду и восстановить его нижнюю половину. 
Вот как она будет выглядеть:

Комментарии излишни.