2017-02-07 7 views
2

У меня вопрос о алгоритме Луна. Алгоритм luhn (mod 10) для обнаружения ошибок и контрольных сумм. Например цифр, как визы, кредитные карты и т.д.Почему алгоритм Луна умножается на 2?

, например, мы имеем цифры: цифр 1 2 3 4 5 6 7 8 9 3

Шаг 1: Умножить значение альтернативных цифр на 2, начиная от второй самой правой цифры. пример: Цифра 1 2 3 4 5 6 7 8 9 3 Умножителя Х2 Х2 Х2 Х2 Х2

Шаг 2: Добавить все отдельные цифры вышеуказанных продуктов совместно с ООН удвоением цифр от оригинала. Если больше 10, добавьте или вычтите с 9. номер.

Пример:

Digit  1 2 3 4 5 6 7 8 9 3 
Multiplier X2 X2 X2 X2 X2 
Result  2 2 6 4 10 6 14 8 18 3 
         1+0 1+4 1+8 
Sum   2+ 2+ 6+ 4+ 1+ 6+ 5+ 8+ 9+ 3 = 40 

Шаг 3: Если общая по модулю 10 равен 0, то это число действует в соответствии с формулой Luhn; в противном случае это недействительно. пример. 40 mod 10 = 0 so valid, if not 0 so not valid.

Вопрос в том, почему в шаге 2 используется Multiply на 2? Какая причина? (с просьбой указать ссылку или документы). спасибо

ответ

3

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

Алгоритм Луна обнаружит [...] почти все транспозиции смежных цифр. Однако он не будет обнаруживать транспонирование двухзначной последовательности от 09 до 90 (или наоборот).

Если смежные места перестановлены, контрольная сумма может измениться. Без разных факторов (2 для четных позиций справа, 1 для нечетных позиций) это не так.

Смежные вопросы