От | Иван | ||
К | 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
Теперь можно вернуться к нашему штрих-коду и восстановить его нижнюю половину.
Вот как она будет выглядеть:
Комментарии излишни.