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

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