본문 바로가기
Coding/초보자를 위한 파이썬 300제

초보자를 위한 파이썬 300제 // 129 주민번호 유효검사

by 포스트it 2021. 1. 17.
반응형

 

문제

주민등록번호는 13자리로 구성되는데 마지막 자리수는 주민등록번호의 유효성을 체크하는데 사용된다. 먼저 앞에서부터 12자리의 숫자에 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 차례로 곱한 뒤 그 값을 전부 더한다. 연산 결과 값을 11로 나누면 나머지가 나오는데 11에서 나머지를 뺀 값이 주민등록번호의 마지막 번호가 된다.

위와 같이 821010-1635210에 대해서 계산을 해보면 마지막 자리는 4가 되어야 함을 알 수 있다. 즉, 821010-1635210은 유효하지 않은 주민등록번호임을 알 수 있다.

다음과 같이 사용자로부터 주민등록번호를 입력받은 후 주민등록번호가 유효한지를 출력하는 프로그램을 작성하라.

>> 주민등록번호: 821010-1635210
유효하지 않은 주민등록번호입니다.

내풀이

i = input("주민등록번호를 입력하세요: ").replace("-","")

result1 = int(i[0])*2 + int(i[1])*3 + int(i[2])*4 + int(i[3])*5 + int(i[4])*6 + int(i[5])*7 + int(i[6])*8 + int(i[7])*9 + int(i[8])*2 + int(i[9])*3 + int(i[10])*4 + int(i[11])*5
result2 = 11 - (result1 % 11)
result3 = str(result2)
if i[-1] == result3:
    print("유효한 주민등록번호 입니다.")
else:
    print("유효하지 않은 주민등록번호입니다.")
    
결과값
주민등록번호를 입력하세요: 821010-1635210
유효하지 않은 주민등록번호입니다.

정답

num = input("주민등록번호: ")
계산1 = int(num[0]) * 2 + int(num[1]) * 3 + int(num[2]) * 4 + int(num[3]) * 5 + int(num[4]) * 6 + \
        int(num[5]) * 7 + int(num[7]) * 8 + int(num[8]) * 9 + int(num[9]) * 2 + int(num[10])* 3 + \
        int(num[11])* 4 + int(num[12]) * 5
계산2 = 11 - (계산1 % 11)
계산3 = str(계산2)

if num[-1] == 계산3[-1]:
    print("유효한 주민등록번호입니다.")
else:
    print("유효하지 않은 주민등록번호입니다.")

 

사실풀면서 이걸 이렇게 노가다 해야되는건가? 라는 의문이 계속들었는데
정답도 노가다였다.....크흠
내 주민번호를 넣어봤는데 유효하다고 뜬다 신기했다.

 

728x90
반응형

댓글