본문 바로가기
수업자료

실습 : 주민등록번호를 이용한 나이, 성별 추출

by ^..^v 2024. 8. 2.
728x90
반응형

사용자의 이름과 주민등록번호를 입력받아 생년월일과 성별을 추출한 후, 현재 날짜를 기준으로 만 나이를 계산하여 출력하는 프로그램을 작성해 보겠습니다. 

 

생년월일을 입력받아 현재 날짜를 기준으로 만 나이를 계산하는 calculate_age 함수를 정의합니다. 

from datetime import datetime

def calculate_age(birthday):
    today = datetime.today()
    age = today.year - birthday.year
    if today.month < birthday.month or (today.month == birthday.month and today.day < birthday.day):
        age -= 1
    return age

이 함수는 먼저 datetime.today()를 사용해 현재 날짜를 가져옵니다. 기본 나이는 현재 연도에서 생년월일의 연도를 빼서 계산합니다. 하지만 만 나이를 계산할 때는 현재 월과 일을 생년월일의 월과 일과 비교하여, 생일이 지나지 않았으면 나이에서 1을 뺍니다. 최종적으로 계산된 나이를 반환합니다.

 

사용자로부터 이름과 주민등록번호를 입력받아 생년월일과 성별을 추출하고, 만 나이를 계산해 출력하는 main 함수를 정의합니다. 

def main():
    name = input("이름을 입력하세요: ")
    rrn = input("주민등록번호를 입력하세요 (예: 901010-1234567): ")
    
    # 주민등록번호에서 성별, 생년월일 추출
    birth_year_prefix = "19" if rrn[7] in "12" else "20"
    birth_year = int(birth_year_prefix + rrn[0:2])
    birth_month = int(rrn[2:4])
    birth_day = int(rrn[4:6])
    
    birth_date = datetime(birth_year, birth_month, birth_day)
    age = calculate_age(birth_date)
    
    # 성별 판별
    gender_digit = rrn[7]
    gender = "남성" if gender_digit in "13" else "여성"
    
    # 결과 출력
    print(f"{name}({gender}) 만{age}세")

먼저, 사용자의 이름과 주민등록번호를 입력받고, 입력된 주민등록번호에서 성별과 생년월일을 추출합니다. 주민등록번호의 7번째 숫자가 1이나 2이면 출생 연도의 접두사를 "19"로, 3이나 4이면 "20"으로 설정합니다. 주민등록번호의 앞 두 자리를 사용해 출생 연도를 결정하고, 3번째와 4번째 자리를 사용해 출생 월을, 5번째와 6번째 자리를 사용해 출생 일을 결정합니다.
생년월일 정보를 통해 datetime 객체를 생성해 birth_date 변수에 저장합니다. 이후 calculate_age 함수를 호출하여 만 나이를 계산합니다.
주민등록번호의 7번째 숫자를 사용하여 성별을 판별합니다. 1이나 3이면 남성으로, 2나 4이면 여성으로 결정합니다.
마지막으로, 사용자 이름, 성별, 만 나이를 출력합니다.

 

전체 소스 코드는 다음과 같습니다. 

 

from datetime import datetime

def calculate_age(birthday):
    today = datetime.today()
    age = today.year - birthday.year
    if today.month < birthday.month or (today.month == birthday.month and today.day < birthday.day):
        age -= 1
    return age

def main():
    name = input("이름을 입력하세요: ")
    rrn = input("주민등록번호를 입력하세요 (예: 901010-1234567): ")
    
    # 주민등록번호에서 성별, 생년월일 추출
    birth_year_prefix = "19" if rrn[7] in "12" else "20"
    birth_year = int(birth_year_prefix + rrn[0:2])
    birth_month = int(rrn[2:4])
    birth_day = int(rrn[4:6])
    
    birth_date = datetime(birth_year, birth_month, birth_day)
    age = calculate_age(birth_date)
    
    # 성별 판별
    gender_digit = rrn[7]
    gender = "남성" if gender_digit in "13" else "여성"
    
    # 결과 출력
    print(f"{name}({gender}) 만{age}세")

if __name__ == "__main__":
    main()

 

 

 

728x90
반응형

댓글