과제
주민등록번호 유효성 검사 프로그램을 만들어보자
- 0 0 1 0 1 1 - 3 0 6 8 5 1 8
- 각 자리에 2,3,4,5,6,7 ,8,9,2,3,4,5 를 곱하고 더함 (마지막 주민등록번호 숫자는 제외)
- 0+0+4+0+6+7+24+0+12+24+20+5 = 102
- 11로 나눈 나머지 값을 구함
- 102 % 11 = 3
- 11에서 위 값을 뺌
- 11 - 3 = 8
- 위 결과가 2자리인 경우 10으로 나눈 나머지 값을 구함
- 결과값이 마지막 주민등록번호와 일치하면 유효한 주민번호
- 단, 클래스로 설계하고 객체를 이용하여 프로그램을 동작
class RRN:
def __init__(self): # 생성자
self.Num = list(input('주민등록 번호를 입력하시오.(1 2 3 4 5 6 - 1 2 3 4 5 6 7) :').split(' ')) # 리스트 타입으로 주민번호를 입력받음
self.Num.remove('-') # 필요없는 문자를 빼준다.
self.Num = list(map(int,Num)) # 리스트 안에 요소를 인트로 변환
self.Tnum = [2,3,4,5,6,7,8,9,2,3,4,5] # 검사하기 위한 값을 입력
def Test1(self):
mul = [i*j for i,j in zip(self.Num, self.Tnum)] # zip함수로 같은 인덱스끼리 묶은 뒤 순서대로 곱해서 변수에 저장
self.result = sum(mul) # sum()을 이용해 리스트 안에 값을 모두 더해준다
return self.result
def Test2(self, n):
self.result = 11 - n % 11 # 11로 나눈 나머지 값을 구하고 11에 그값을 빼준다
return self.result
def Test3(self, n):
if n > 9: # 값이 두자리수면 10으로 나눠준뒤 n에 다시 저장
n = n % 10
if n == self.Num[12]: # 마지막 나온 값과 주민번호 마지막 숫자 가 같으면 유효한 번호
print('유효한 주민번호')
else: # 같지않으면 유효하지 않은 번호
print('유효하지 않은 주민번호')
def main(self): # main 메서드를 호출하면 모든 검사가 적용됨 하나씩 따로 사용도 가능
print('입력한 주민등록번호:', *self.Num[:6], '-', *self.Num[6:])
result_test1 = self.Test1()
print(f'첫번째검사: {result_test1}')
result_test2 = self.Test2(result_test1)
print(f'두번째검사: {result_test2}')
print(f'입력한 마지막번호: {self.Num[12]}')
self.Test3(result_test2)
main() 만으로 잘 작동이 된다.
메서드를 따로 호출해도 잘 적용되는것을 볼수있다.
'코딩 > 과제' 카테고리의 다른 글
과제 sql 파이썬을 이용한 프로그램 (2) | 2024.04.01 |
---|---|
과제 - 파이썬 파일 관련 프로그램 (1) | 2024.03.22 |
과제 4 - 파일 입출력을 이용한 단어장 만들기 (0) | 2024.03.22 |
과제 - 가위 바위 보 만들기, 로또번호 추첨하기 (0) | 2024.03.19 |
과제 0.1 + 1.1 == 1.2 가 False 인 이유 (0) | 2024.03.12 |