Coding/초보자를 위한 파이썬 300제

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

포스트it 2021. 1. 17. 23:51
728x90
반응형

 

문제

주민등록번호는 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
반응형