본문 바로가기
Computer & Program/잡다한 이모저모

주민등록번호 & 패리티 코드

by TDRemon 2012. 1. 3.
반응형

우리 일상 생활에 쓰이는 코드(ex. 바코드, 주민등록번호 등등)에는 패리티 코드, 즉 확인 코드가 많이 쓰이고 있다.
우선 주민등록번호의 구성을 살펴보면...


이렇다. 앞의 6자리 구성은 모두 알고 있었을 것이다. 그리고 뒷자리 7자리 중 첫번째 자리역시 누구나 아는 사실이다. 그리고 나머지 5자리는 출생 지역 및 출생 신고 순으로 결정된다. 그리고 가장 중요한 오류 검증번호(패리티 코드)가 있다. 예를 들어 881225-123456X라고 하자. 그럼 아래와 같은 방법으로 임의의 수 X를 구한다.

(8*2) + (8*3) + (1*4) + (2*5)  + (2*6)  + (5*7)  + (1*8)  + (2*9)  + (3*2)  + (4*3)  + (5*4) + (6*5)  = X

이렇게 하여 X라는 숫자가 나온다. 그렇게 한 다음 11에서 X를 뺀다. 즉, 11-X를 한다. 이 숫자가 마지막 자리인 패리티 코드로 쓰인다. 근데 만약 X가 0이거나 1이면 11-X이 11이거나 10이 된다. 한자리 수가 들어가야 할 위치에 2자리가 나올 경우에는 다시 10으로 나눈 나머지를 패리티 코드로 쓴다.


위의 과정이 주민등록번호에서의 패리티 코드의 사용 예이다. 이번에는 바코드의 경우를 살펴보자.


위의 경우가 UPC(Universal Product Code)이다. 총 12자리의 숫자로 이루어진 바코드를 앞에서 부터 X1이라고 세서 값들을 홀수번째 숫자들에는 3을 곱해서 더하고 짝수 번째 값들은 그냥 더한 총 합을 10의 배수로 만들게 하는 것이다. 앞의 11자리의 수들은 생산 품목, 제조업체코드, 상품 코드 임으로 정해진 결과들에 의해 정해진다. 마지막 패리티 코드, 즉 체크 숫자로 10의 배수가 되게 조정하는 것이다.


위의 경우가 우리나라가 쓰고있는 바코드 숫자체계인 KAN(Korean Article Number)이다. 총 13자리로 이루어져 있고 계산 과정은 위에서 보는 바와 같다. 기본적인 형태는 UPC와 동일하다. 하지만 10의 배수로 만들어서 확인하는 이 방법에는 치명적인 결함을 가지고 있다. 바로 값이 바뀌어도 정상적으로 스캔이 되는 수가 있는 것이다. 대수롭지 않게 생각할 수도 있지만 이럴 경우 물건의 값이 잘못들어가게 되는 수가 있는 것이다.


위의 경우가 값이 바뀌어도 정상적으로 스캔되는 경우를 나타낸 것이다.

위의 경우들은 ISBN(International Standard Book Number)과 ISSN(International Standard Serial Number)이다. 계산 방법들은 위의 방법대로이다. 위의 UPC와 KAN의 경우와 달리 11의 배수로 하고있다. 11의 배수로 하면 좋은 점은 소수이기 때문에 값이 바뀌어도 알아 낼수 있고 우연히 겹치는 숫자와 같은 만약의 경우를 미연에 방지할 수 있다.

위와 같은 경우 외에도 패리티 코드는 많이 쓰인다. 예를 들어 네트워크 분야에서 값을 전송할 때 송신자가 보낸 값이 정확한 값인지 확인하기 위해 필요한 정보를 가지고 있는 비트 외에 확인 비트 및 패리티 비트를 함께 보낸다. 즉, 신뢰성을 높이기 위해 효율성은 떨어지지만 다른 값들을 함께 보내는 것이다. 자세한 사항은 필자가 지금 기억이 안나서 못 쓰지만 네트워크 분야에서도 패리티 코드는 없어서는 안될 아주 중요한 개념으로 쓰인다.

이 밖에도 우리가 알게 모르게 패리티 코드는 우리가 사는 세상에 검증 이라는 이름하에 많이 쓰이고 있다. 살면서 아무렇지 않게 봐오던 숫자에 정말 많은 의미가 담겨져 있는 것이다.


반응형

댓글