파이썬 주민등록번호 유효성 검사
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
반응형
'파이썬 테스트 [Python]' 카테고리의 다른 글
파이썬 이차원 리스트 문제 (feat. reverse, reversed의 차이) (28) | 2022.01.20 |
---|---|
파이썬 tuple형태 반환 (feat. enumerate()) (36) | 2022.01.18 |
파이썬 턴제(Turn-based Strategy) 게임 (4) | 2021.12.22 |
파이썬 베스킨라빈스 31게임 (12) | 2021.12.21 |
파이썬 숫자 맞추기 게임(업다운 게임) (18) | 2021.12.20 |
댓글