본문 바로가기

python

파이썬/python/주민등록번호검증문제

유효한 주민등록번호인지 아닌지를 판별하는 코드를 짜보자. 판별 방법은 아래와 같다.

 

-  기본 주민등록코드에는 각 숫자에 대응하는 가중치가 있다. 가중치는 주민등록번호의 순서에 따라 

'2 3 4 5 6 7 8 9 2 3 4 5 ' 이다.

먼저 마지막 숫자는 제외하고, 기본코드의 각 12자리와 가중치를 모두 곱하여 합한다.

합한 값을 11로 나눈 나머지 값을 구한다.

11에서 그 나머지 값을 뺀 후, 이를 10을 나눈 나머지를 구한다.

나머지의 1의 자리 값과 주민등록번호 마지막 자리 값이 맞아야 유효한 주민등록번호이다.

 

 

1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
checkNo = '234567892345' # 가중치
kssn =input('하이픈 없이 주민등록번호 전체 자리를 적으시오. : ')  #문자열로 받음.
 
total = 0 # 주민등록번호 * 가중치 의 합을 담을 변수
for i in range(12):
    total += int(kssn[i]) * int(check[i])  # 주민등록번호와 해당 가중치를 곱하여 모두 합한다.
 
result = (11 - total % 11) % 10 # 합한 값을 11로 나눈 뒤 나온 나머지를 다시 10으로 나누어 그 나머지를 구한다.
 
if str(result) == kssn[12]: # 그 나머지와 주민등록번호 마지막 번호가 같은지 판단한다.
 print('유효한 주민등록번호입니다.')
else:
    print('유효하지 않은 주민등록번호입니다.')
 
 
 
kssn = input('주민등록번호를 적으시오 : ')
total = 0
for i in range(12):
    total += int(kssn[i]) * (i + 2 if < 8 else i - 6)
print(total)
result = (11 - total % 11) % 10
print('유효함' if str(result) == kssn[12else '유효하지 않음')
 
cs

 

2. 가중치를 구하는 방식도 있다.

 

가중치 '2 3 4 5 6 7 8 9 2 3 4 5 ' 는 8번 인덱스를 기준으로, 8보다 작으면 가중치 값은 인덱스 값보다 2크고, 8보다 크면, 인덱스 값보다 6이 작다. 이를 이용한 것이다.

1
2
3
4
5
6
7
8
kssn = input('주민등록번호를 적으시오 : ')
total = 0
for i in range(12):
    total += int(kssn[i]) * (i + 2 if < 8 else i - 6)
print(total)
result = (11 - total % 11) % 10
print('유효함' if str(result) == kssn[12else '유효하지 않음')
 
cs