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