Luhn 알고리즘

개발/Note 2020. 6. 2. 15:07
반응형

# Luhn 알고리즘 이란?

- 신용카드번호, IMEI 번호, 주민번호 가 유효한 값인지 간단히 검사하는 알고리즘이다.

- 1960년대에  개발된 개방형 공식이다.

- 모듈러스10 혹은 mod10 알고리즘이라고 한다.

 

# Luhn 알고리즘 설명

1.  가장 오른쪽  숫자부터 시작해서 짝수번째에 해당하는 자릿수에 2를 곱한다.

     * 만약 2를 곱한 수가 9 이상일 경우 각각의 자리수의 값을 더한다.

2.  가장 오른쪽 숫자부터 시작해서 홀수번째에 해당하는 숫자들은 그냥 그대로둔다.

3.  모든 값을 더한 뒤 10으로 나눈 나머지가 0 이면 유효한값이다.

 

# 예를 들어보자 


 * MasterCard Number:  5111-1111-1111-1118

step1.  가장 오른쪽  숫자부터 시작해서 짝수번째에 해당하는 자릿수에 2를 곱한다. ( 가장오른쪽부터 index가 시작한다.)  

step2.  가장 오른쪽 숫자부터 시작해서 홀수번째에 해당하는 숫자들은 그냥 그대로둔다.

 

 cardNo

5

1 

1 

1 

1 

1 

1 

1 

1 

1 

1 

1 

1 

 1

 1

8 

 index

16

 15

 14

 13

 12

 11

 10

 9

 8

 7

 6

 5

 4

 3

 2

1 

 double

10

 1

 2

 1

 2

 1

 2

 1

 2

 1

 2

 1

 2

 1

 2

 8

 sum

1 (1+0)

 2

 1

 2

 1

 2

 1

 2

 1

 2

 1

 2

 8

    

step 3. 각각의 값들을 모두 더한다 . 

표에서는 분홍색으로 칠해진 sum 에 있는 값들을 모두 더하게 된다. 값을 더한 결과는 30이다.

30을 10으로 나누면 30/10 = 0 이므로 유효한 카드번호값이다. 

   

 

# 비고

Luhn 알고리즘(룬 공식)은 번호에 대해 각각 한자리 숫자를 이용하여 간단히 유효성 검증을 하는 알고리즘이다

좀 더 복잡한 유효성 체크를 원하면 Verhoeff algorithm and the Damm algorithm 를 사용하면된다.

 

## 카드번호 구성

* 카드번호를 예로 들은 만큼, 카드번호 구성에 대해 추가적으로 말하자면!!

 

한국내에서  사용할 수 있는 신용(체크)카드 번호는 다음과 같이 구성된다. 

[ MII 번호 ]

  MII 숫자값

 발행자 분류 

 0

 ISO/TC 68 및 기타 산업

 1

  항공

 2

 항공 및 기타 잠재적 산업 할당

 3

 여행 및 엔터테인먼트, 은행업/금융

 4

 은행업 및 금융

 5

 은행업 및 금융

 6

 상업 및 은행업/금융

 7

 석유 및 기타 잠재적 산업 할당

 8

 건강, 전기통신 및 기타 잠재적 산업 할당

9

 국내 전용

* MII : 주 산업 식별번호

 

[ MII번호를 포함한 INN 번호 ]

카드사 INN범위

자리수

 American Express (신한,삼성,KB,하나카드등)

 34, 37

 15

 Diner's Club International (현대카드)

 300-305, 309,36, 38-39

 14

 VISA (롯데, 비씨, 삼성, 신한, 하나, 현대카드 등)

 4

 16

 Master Card

 51-55

 16

 Discover

 60110, 60112-60114, 601174-601179, 601186-601199, 644-649, 65

 16

* INN : 카드의 발급자를 식별할 수 있는 6자로 된 번호이다.

 

첫쨰자리부터 여섯째 자리까지의 번호를 보면 해당 카드는 어느나라의 카드사가 발급한 카드인지, 카드 회원이 일반, 골드, 개인,  법인인지 알 수 있도록 되어있다.

 

2020/12/16 - [개발노트] - Code 128 Barcode의 Check Digit 계산방법

2020/12/15 - [iOS/Tips] - 디버깅 차단 처리 (Anti Debug)

2020/12/14 - [iOS/Tips] - bundle id 알아내기

2020/12/12 - [AI/Algorithm] - 2D 충돌처리

2020/12/11 - [iOS/Swift] - UIViewController 스위칭

2020/12/11 - [개발노트] - PlantUML 설치 (Mac OS X)

2020/12/11 - [개발노트] - 특수문자 발음

2020/12/10 - [iOS/Objective-C] - 웹뷰에서 javascript 함수 동기식 호출

2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (2/2)

2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (1/2)

2020/12/10 - [iOS/Tips] - Custom UserAgent 설정

2020/12/10 - [iOS/Tips] - CocoaPods 설치 및 제거

2020/12/10 - [iOS/Tips] - Clang diagnostic 경고 무시하기

2020/12/10 - [개발노트] - Bluetooth UUID

2020/12/08 - [개발노트] - 모바일 앱 메모리덤프 이슈 해결방법

반응형

'개발 > Note' 카테고리의 다른 글

NVRAM(PRAM) 재설정 방법  (0) 2020.07.11
duplicate symbol 에러 해결  (0) 2020.06.16
NFC Xcode 설정  (0) 2020.05.29
NFC (Near Field Communication)  (0) 2020.05.29
NFC Tag 저장용량  (0) 2020.05.29
블로그 이미지

SKY STORY

,