본문 바로가기
코딩/과제

과제 - 주민등록번호 유효검사

by Song1234 2024. 3. 19.

과제

주민등록번호 유효성 검사 프로그램을 만들어보자

  • 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() 만으로 잘 작동이 된다.

 

 

메서드를 따로 호출해도 잘 적용되는것을 볼수있다.