2008-09-29 2 views
1

За исключением контрольной цифры, какова минимальная длина, на которой будет работать алгоритм luhn?Каково минимальное число, на котором будет работать алгоритм luhn?

Мои мысли, что он будет работать на любом количестве, превышающем 2 цифры (опять же, за исключением контрольной цифры).

Причина, по которой я спрашиваю, это: если i итерирует все цифры в числе справа налево. Это приводит к тому, что i% 2 == 0 (используется для поиска альтернативных позиций в числе) в моей проверке luhn, чтобы сбой, если число равно 3 цифрам или меньше (например, 125, что на бумаге представляется действительным числом)

Очевидно, я мог бы изменить свое условие от i% 2 == 0 к чему-то другому, но если это неправильное поведение для алгоритма, было бы неплохо узнать.

+0

Что случилось с i% 2. Вы начинаете с левой цифры и прокладываете себе путь вниз. – 2008-09-29 20:57:59

ответ

3

Алгоритм Луна будет работать на двух цифрах. Он будет предупреждать, что одна цифра неверна и некоторые (но не все) случаи, когда цифры переносятся. Черт, теоретически он будет работать с одной цифрой, но это не очень полезно. Вы можете сами убедиться, установив одну цифру, затем изменив другую и проверив, что каждое значение другой цифры даст уникальную «контрольную сумму». Однако с двумя цифрами просто добавление цифр mod 10 даст вам одно и то же свойство, но оно не поймает никаких ошибок транспонирования.

-3

Wikipedia's entry on the Luhn algorithm имеет реализацию C#, которая использует другой метод для определения чередующихся цифр, которые не зависят от операции мод.

bool CheckNumber(int[] digits) 
{ 
    int sum = 0; 
    bool alt = false; 
    for (int i = digits.Length - 1; i >= 0; --i) { 
    int thedigit = digits[i]; 
    if (alt) { 
     thedigit *= 2; 
     if (thedigit > 9) { 
     thedigit -= 9; 
     } 
    } 
    sum = (sum + thedigit) % 10; 
    alt = !alt; 
    } 
    return (sum == 0); 
}