유효한 주민등록번호인지 아닌지를 판별하는 코드를 짜보자. 판별 방법은 아래와 같다.
- 기본 주민등록코드에는 각 숫자에 대응하는 가중치가 있다. 가중치는 주민등록번호의 순서에 따라
'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[12] else '유효하지 않음')
|
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[12] else '유효하지 않음')
|
cs |
'python' 카테고리의 다른 글
python/파이썬/지그재그정렬 (0) | 2019.12.27 |
---|---|
파이썬/python/달팽이 배열 (1) | 2019.12.27 |
python/파이썬/유클리드 호제법/ (0) | 2019.12.24 |
python/파이썬/로또추첨기 만들기/ (0) | 2019.12.22 |
코딩도장 문제풀이/ Special Sort (0) | 2019.12.22 |