Контрольный разряд

Где

Контрольный разряд очень часто используется в различных номерах, с которыми мы сталкиваемся как в жизни, так и в информационных системах:

Как правило, контрольный разряд в небольших номерах (длиной 10-13 цифр) – это только одна последняя цифра. В номерах подлиннее – это могут быть уже несколько цифр.

 

Зачем

Придумали его затем, чтоб максимально исключить вероятность неумышленной ошибки при его вводе. Полностью исключить ошибки нельзя, разумеется.

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

Пример

Самый примитивных пример – сложить все цифры и получить остаток от деления на десять (взять последнюю цифру).

Такой алгоритм по грубой оценке даёт защиту от однократной ошибки на 100%, однако совсем не даёт защиты от второго по распространённости способа ошибаться – перестановки соседних цифр.

Как

Расчёт контрольного разряда работает на базе примитивных арифметических алгоритмов.

Основные операции – сложение, умножение, остаток от деления. Важное понятие – вес разряда.

Классическая схема – сложить все цифры умноженные на вес каждого разряда и получить остаток от деления на какое-то число:

a12 = ( a01 * k01 + a02 * k02 + … + a11 * k11 ) mod M

Здесь: aXX – разрядные цифры из номера, kXX – волшебные числа конкретного алгоритма, ну а M = 11 или 10 (чтоб получить на выходе одну цифру от 0 до 9).

Волшебная последовательность может быть такой (1 2 1 2 1 2 1 2 1 2), или такой (3 1 3 1 3 1 …), или такой (1 2 3 4 5 6 …).

В самом примитивном примере выше веса разряда одинаковы и равны единице, а константа деления равна десяти.

Нумерология

Нумерология – ну тоже даёт определённый контрольный номер. Проблема нумерологии в том, что она пытается придать этому числу какое-то мистическое значение и глубокий сакральный смысл.

Разные

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

Из жизни

С тестирования получаю замечание: “Не работает проверка РНН: я ввела случайные цифры, но ошибки не возникло”.

В чём фикус: защита от однократной ошибки – 100%, но для случайного набора цифр вероятность совпадения контрольного разряда равна 10%.

Баланс

Понятное дело, что чем больше контрольных цифр будет, то тем больше ошибок он способен будет вылавливать. Для коротких номеров считается, что одного разряда хватает. Вот такие жадные и прижимистые разработчики.

Как правило, в контрольный разряд не заложены функции “восстановления ошибки”, для восстановительных функций нужны и алгоритмы посложнее и одного разряда может быть маловато.

Реализация

От теории к практике!

 

Выкладываю в папку на гуглокоде. Там есть:

 

По понятным причинам эти программы надо доработать напильником.

 

Пара скриншотов из программы анализа задним числом:

Выбор контрагентов

Отчёт по правильности налоговых номеров

Отзывы приветствуются.

Опубликовано 29.01.2013 в 17:24 · Автор ivan · Ссылка
Рубрики: ABAP

Написать комментарий