본문 바로가기

Python 기초

파이썬 예제(과제)-5. class문

*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*
주민등록번호 유효성 검사 프로그램을 만들어보자

  • 0 0 1 0 1 1 - 3 0 6 8 5 1 8 ->인덱스값으로 12자리
  • 각 자리에 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으로 나눈 나머지 값을 구함
  • 결과값이 마지막 주민등록번호와 일치하면 유효한 주민번호
  • 단, 클래스로 설계하고 객체를 이용하여 프로그램을 동작

클래스 설계+객체->생성자 함수 생성, 구하려는 값은 매개변수 1개로 처리하기

각 자리에 2,3,4,5,6,7,8,9,2,3,4,5 를 곱하고 더함(마지막 주민등록번호 숫자는 제외)-> 동일한 계산과정 총 11번 반복하므로 for문 처리
연산과정은 함수 1개로 모든 처리가 가능하게
결과값 if문 조건 걸기: 조건이 % 10과 마지막 번호 일치 2가지만 있으므로 if, else만 사용(if, elif만 사용하더라도 상관없음), 넣으려는 인덱스값 자리는 len()함수로 13자리이므로 if조건문에 !=13처리

from typing import Final
#구하려는 값
#나중에 객체로 설정

#계산
class Number:
    def __init__(self,inn): #객체값 생성자 함수 설정
        self.inn=inn
    def func1(self):    # 연산과정 1개의 메서드(함수)로 처리할 수 있게
        if len(self.inn) !=13: #입력 숫자 인덱스길이가 13이 아닐경우 False 처리
            return False    

        count=0  # 곱하고 더한 최종값
        first=[2,3,4,5,6,7,8,9,2,3,4,5]  #각자리에 곱하려는 값 리스트
#2~5까지 리스트로 만들고 1:1 대칭이 되게, 계산하려는 인덱스 갯수는 0~11번까지 총 12개

        for i in range(0,12):
            count+=self.inn[i]*first[i]  #count=count+곱한값

        count1= count %11
        count2=11-count1
        if count2  >9:
            return count2 % 10 == self.inn[12]
        else :
            return count2 == self.inn[12]

#객체 삽입
inner=input('입력 값')  #입력함수=매개변수
inn=[int(x) for x in str(inner)]    #문자열 입력값->정수형 처리
source=Number(inn)      #객체 삽입
source.func1()      #클래스 메서드 삽입
print(source.func1())
#if문
if source.func1:
    print('유효')
else:
    print('우효하지 않음')

확인