loading
본문 바로가기
파이썬 테스트 [Python]

파이썬 주민등록번호 유효성 검사

by GSTGTS 2022. 1. 7.

파이썬 주민등록번호 유효성 검사

 

 

121 ~ 130

.answer {margin-top: 10px;margin-bottom: 50px;padding-top: 10px;border-top: 3px solid LightGray ...

wikidocs.net

 

 

파이썬 300제를 풀다가 주민등록번호 유효성을 검사하는 문제가 나왔다. 문제를 풀고 싶은 분들은 포스팅 보지 말고 문제부터 풀어보길.

 

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

#   8 2 1 0 1 0 - 1 6 3 5 2 1 0
# x 2 3 4 5 6 7   8 9 2 3 4 5
# -----------------------------
# 1차 계산: (8*2 + 2*3 + 1*4 + 0*5 + 1*6 + 0*7 + 1*8 + 6*9 + 3*2 + 5*3 + 2*4 + 1*5) = (128 % 11) = 7
# 2차 계산: 11 -7 = 4
# 위와 같이 821010-1635210에 대해서 계산을 해보면 마지막 자리는 4가 되어야 함을 알 수 있다.
# 즉, 821010-1635210은 유효하지 않은 주민등록번호임을 알 수 있다.

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

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

user = input("주민등록번호: ")
user = user.replace('-', "")
check = list(user)

last_num1 = (int(user[0])*2 + int(user[1])*3 + int(user[2])*4 + int(user[3])*5 + int(user[4])*6 + int(user[5])*7 + int(user[6])*8 + int(user[7])*9
             + int(user[8])*2 + int(user[9])*3 + int(user[10])*4 + int(user[11])*5) % 11
last_num2 = 11 - last_num1
if int(user[:1]) == last_num2:
    print("유효한 주민등록번호입니다.")
else:
    print("유효하지 않은 주민등록번호입니다.")

주민등록번호에 번호마다 의미가 있을거라는 생각은 했지만, 이런식으로 유효성을 검사하는 지는 처음 알았다.

주민등록번호 마지막 번호에 이런 비밀이 숨겨져 있다니..

 

 

나는 일단 주민등록번호를 input으로 받고, replace를 사용해서 하이픈(-)을 제거하고 없는 공간으로 대체했다.

그리고 이 문자열 번호를 리스트로 만들면,

user = input("주민등록번호: ")
user = user.replace('-', "")
check = list(user)

print(check)

>>>주민등록번호: 123456-7891011
>>>['1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0', '1', '1']

위와같이 문자열 번호를 가진 리스트로 만들 수 있다.

 

그리고 문제에 주어진 식대로 곱하고 더하고 나머지를 11로 뺀 수가 마지막 숫자가 되어야 유효한 주민등록번호가 된다.

input으로 받은 숫자는 문자열이니 int()를 사용하고, 마지막 번호를 슬라이싱(slicing)해서 계산이 끝난 숫자와 같은지 비교해본다.

 

 

- 문제로 확인할 것

.replace

list()

slicing

 

반응형

댓글