Programming
luhn 알고리즘
Peter Ryu
2012. 10. 17. 17:54
카드 숫자 체크하는 알고리즘
신용 카드상의 번호 검증을 위해 사용하는 알고리듬.
1960년대에 개발된 개방형 공식이다. 원리는
㉠카드 번호의 우측 숫자부터 매 2번째 숫자마다 2를 곱하고,
㉡위 ㉠에서 2를 곱하지 않은 숫자들과 ㉠에서 나온 숫자들을 합한다(㉠에서 나온 수가 2자리 수이면 2개의 숫자를 합한다).
㉢위 ㉡에서 나온 수와 그 다음으로 큰 10단위 수와의 차이를 구한다(㉡에서 나온 수가 34이면 다음으로 큰 10단위 수 40과의 차이, 6을 구한다).
㉢에서 나온 숫자가 카드의 점검 숫자와 일치해야 한다.
http://en.wikipedia.org/wiki/Luhn
Java로 간단하게 짜본 소스
public void luhnAlgorithm(){ String cardNum = "123456789"; int checkNum = 0; int sumCheck = 0; boolean times = false; for(int i =cardNum.length();i>0;i--){ int charvalue = Integer.parseInt(cardNum.substring(i-1, i)); if(times){ charvalue =charvalue*2; if(charvalue > 10){ charvalue = charvalue/10 + charvalue%10; } } times = !times; checkNum += charvalue; } if(checkNum%10 !=0){ sumCheck = 10 - checkNum%10; } System.out.println("check : "+checkNum); System.out.println("sumcheck : "+sumCheck); }