-
룬(luhn) 알고리즘 구현Technique/Javascript 2016. 2. 17. 19:25반응형
대단한건 아니지만 오늘 룬 알고리즘을 구현 할 일이 생겼다.
난 무식쟁이라 룬 알고리즘이란걸 오늘 알았다는건 안비밀...ㅎㅎ
무튼 신용카드 번호를 검증할때 사용하는 알고리즘이다.
위키를 보면 금방 이해할걸 여기저기 구글링하다보니 머리만 아파졌고,
결국 위키보고 이해했다.....
쉽게 말하자면
1. 신용카드 번호를 뒤에서 부터 세어( 즉 오른쪽에서 부터 세라는 말이다. ) 더하면서 진행
2. 2의 배수의 자리에 있는 수는 x2 를 한다.
3. 2번 과정에서 x2 한 숫자가 10보다 크다면 10의 자리수와 1의자리 수를 더한수를 더한다.
4. 위 과정이 끝낫다면 전체 숫자가 10의 배수라면 true 아니면 false
그림을 보자
위 카드번호는 테스트용 카드번호로 검색하면 나오는 비자카드 번호이다.
오른쪽 부터 읽어 나갓을때 붉은 색 부분이 x2 해야하는 부분이다
이런식으로 더해가면 결과는 90이 나오고
90은 10의 배수이기에 위 번호는 참이 된다.
세계적으로 유명한 5개 카드회사 ( visa, master, jcb, amex, diners )는 룬 알고리즘을 이용하여 카드번호를 생성하기에 검증 가능한 방법이다.
선두 문자로 체크하는 것도 좋지만 룬알고리즘을 이용해 재차 확인하는 것도 안전하다고 생각한다.
허접하지만 javascript로 짜봣다.
123456789101112131415161718192021222324252627282930313233343536// luhn algorithmで2次チェック// カード番号の長さvar tmpCardNoLen = cardNo.length;// カード番号をリスト化var tmpCardNo = cardNo.split("");// カウンタvar tmpCount = 1;// 合計var tmpTotal = 0;// 計算for (var i = tmpCardNoLen; i > 0; i--) {// カード番号の右から左へ移動しながら、2番めの順番でかける2それ以外は普通にプラス// 2の倍数の場合X2if (tmpCount % 2 == 0) {var tmpDouble = tmpCardNo[i - 1] * 2;// かけた結果が10以上なら、二桁と一桁をたすif (tmpDouble > 10) {var tmp = tmpDouble.toString().split("");tmpTotal = parseInt(tmpTotal) + parseInt(tmp[0]) + parseInt(tmp[1]);} else {// 普通は全体に足すtmpTotal += parseInt(tmpDouble);}} else {// それ以外は普通に足すtmpTotal += parseInt(tmpCardNo[i - 1]);}tmpCount++;} // for終了if (tmpTotal % 10 != 0) {return false;}return true;cs
주석이 일본어 인건 신경쓰지 말자....ㅋㅋ위에서 설명한 방법을 그대로 javascript로 옮겼다.
javascript는 잘 다루지 못하는 언어이지만..... 그렇기에 저기 저 parseInt가 상당히 신경쓰인다. 진짜 저렇게 밖에 사용하지 못하는건가... 싶은 마음이랄까....
무튼 룬 알고리즘에 대해 알아봤다.
생각보다 크게 어려운 알고리즘은 아니지만. 알아둔다면 지금같이 결제시스템을 만드는 때엔 크게 도움이 될 것 같다.
끝!!
반응형'Technique > Javascript' 카테고리의 다른 글
객체, Prototype (0) 2016.11.20 jQuery keyPress Event에 대하여 (0) 2016.09.09 클로져 기초 (0) 2016.06.20 [ jQuery ] select box actions (0) 2016.04.06 [ 펌 ] jQuery 성능 최적화 (0) 2016.01.27