luhn 알고리즘

Programming 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);
	}




WRITTEN BY
Peter Ryu
Crazy Programmer's World

,