2008-09-29 7 views
1

체크 디지트를 제외하고, luhn 알고리즘이 작동하는 최소 길이는 얼마입니까?luhn 알고리즘이 작동하는 최소 길이는 얼마입니까?

내 생각에 두 자리 이상의 숫자 (다시 말하면 체크 숫자 제외)에서 작동합니다.

이유는 내가 물어 : 만약 내가 오른쪽에서 왼쪽으로 숫자의 모든 숫자를 반복합니다. 숫자가 3 자리 이하인 경우 (예 : 125 - 종이에 유효한 숫자 인 것 같습니다) 내 luhn 유효성 검사에서 i % 2 == 0 (숫자에 대체 위치를 찾는 데 사용됨)이 발생합니다.

분명히 i % 2 == 0에서 내 상태를 바꿀 수는 있지만 알고리즘에 대한 올바른 동작이 아니라면 알아두면 좋을 것입니다.

+0

내가 % 2을 (를) 잘못 사용했습니다. 왼쪽 자릿수부터 시작하여 아래로 나아갑니다. –

+0

만약 당신이 125라면 체크 숫자는 아마 5가 될 것입니다. 그러나 '2'대신에 체크 숫자를 두 배로하기 때문에 i % 2를 사용하면 유효한 숫자를 얻지 못할 것입니다. – IaCoder

+0

125에 대한 Luhn 알고리즘을 실행하면 1과 5는 "두 배로 증가"되고 221을 얻고 숫자가 5에 추가됩니다. –

답변

3

Luhn의 알고리즘은 두 자리에서 작동합니다. 한자리 숫자가 틀리거나 숫자가 전치되는 경우 (전부는 아님)를 경고합니다. 젠장, 그것은 이론적으로 한자리 숫자로 작동하지만, 그렇게 유용하지는 않습니다. 한 자릿수를 수정 한 다음 다른 자릿수를 변경하고 다른 자릿수의 각 값이 고유 한 "체크섬"을 제공하는지 확인하여 직접 확인할 수 있습니다. 그러나 두 자리 숫자 만 있으면 숫자 10을 추가하면 동일한 속성을 얻을 수 있지만 전환 오류는 발생하지 않습니다.

-3

Wikipedia's entry on the Luhn algorithm에는 mod 연산을 사용하지 않는 다른 숫자를 결정하는 데 다른 방법을 사용하는 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); 
} 
관련 문제