대학생 코딩 과제 대행 java, python , oracle 다섯 번째

https://open.kakao.com/o/s3aMpbA

이번에는 아래와 같은 과제를 파이썬3로 의뢰 받았다.

## 주민등록번호 유효성 검사기

# 주민등록번호는 일정한 규칙으로 이루어진 숫자의 연속입니다.
# 이 규칙을 이용하면, 어떤 숫자열이 입력으로 들어왔을 때,
# 이 숫자열이 적합한 주민등록번호인가를 판별할 수 있습니다.

# 주민등록번호에 반영된 규칙은 매우 많지만,
# 두 가지로 제한합니다.
# 1. 첫 6 자리는 생년월일입니다. 년도는 00 ~ 99 까지 가능하고, 월은 01 ~ 12 까지 가능합니다. 일은 01 ~ 31 까지 가능합니다.
#   (각 월에 따라서 일의 제약이 달라집니다. 2월은 28일까지 인 것으로 해주세요.)
# 2. 7 번째 숫자는 1 ~ 4 만 허용합니다.
# 1 : 1900 년대에 태어난 남자
# 2 : 1900 년대에 태어난 여자
# 3 : 2000 년대에 태어난 남자
# 4 : 2000 년대에 태어난 여자

# 입력은 ****** - ******* 형식으로 입력을 받는다고 가정합니다.
# 출력은 유효한 경우에는 생년월일과 성별을 출력하고,
# 유효하지 않은 경우에는 유효하지 않다는 메세지를 출력하도록 합시다.
# 입력값으로 특정 값을 받으면 프로그램이 종료되도록 만듭시다.

"""
(실행 예시)
확인하고 싶은 주민번호를 입력해주세요: 940822 - 1434652

1994 년 8 월 22 일 생 남자입니다.

확인하고 싶은 주민번호를 입력해주세요: 990231 - 2098367

유효하지 않은 주민등록번호입니다.

확인하고 싶은 주민번호를 입력해주세요: 종료

프로그램을 종료합니다.
"""

# -*- coding:utf-8 -*-
while (True):
    print('"""')
    print()
    day31_month = [1, 3, 5, 7, 8, 10, 12]
    day30_month = [4, 6, 9, 11]
    day28_month = [2]
    number = input("확인하고 싶은 주민번호를 입력해주세요:")
    if (number == "종료"):
        print()
        print("프로그램을 종료합니다.")
        print('"""')
        break
    else:# input 값이 종료 이외일 경우 밑에 코드들 실행
        number_list = number.split('-')#'-' 기준으로 나누어서 리스트로 만듬
        number1 = int(number_list[0])#생년월일 부분 정수형
        p_number1 = number_list[0]#생년월일 부분 문자형
        year = int(number_list[0][0:2])#생년 정수형
        p_y = number_list[0][0:2]#생년 문자형
        month = int(number_list[0][2:4])#월 정수형
        day = int(number_list[0][4:])#일 정수형
        number2 = int(number_list[1])#뒤에 7자리 정수형
        p_number2 = number_list[1]#뒤에 7자리 문자형
        sex = int(number_list[1][0])#뒤에 7자리 중 첫숫자 정수형
        if (len(p_number1) != 6):#생년월일이 6자리가 아니면 실행
            print()
            print("유효하지 않은 주민등록번호입니다.")
            print()
            continue
        elif (len(p_number2) != 7):#뒤에 7자리가 7자리가 아니면 실행
            print()
            print("유효하지 않은 주민등록번호입니다.")
            print()
            continue
        if (not(0 < month < 13)):#월이 1~12 사이 숫자 아니면 실행
            print()
            print("유효하지 않은 주민등록번호입니다.")
            print()
            continue
        if (month in day31_month):
            if (not (0 < day < 32)):#일이 1~31사이가 아닐경우
                print()
                print("유효하지 않은 주민등록번호입니다.")
                print()
                continue

        if (month in day28_month):#월이 2월일 경우
            if (not(0 < day < 29)):#일이 1~28일이 아닐경우 실행
                print()
                print("유효하지 않은 주민등록번호입니다.")
                print()
                continue

        if (month in day30_month):
            if (not (0 < day < 31)):  # 일이 1~30사이가 아닐경우
                print()
                print("유효하지 않은 주민등록번호입니다.")
                print()
                continue
        if (sex == 1 or sex == 2):#뒷7자리중 첫자리가 1 또는 2인 경우
            p_y = "19" + p_y
            if (sex == 1):#1일경우
                print()
                print(p_y + " 년 " + str(month) + " 월 " + str(day) + " 일 생 남자 입니다.")
                print()
            elif (sex == 2):#2일 경우
                print()
                print(p_y + " 년 " + str(month) + " 월 " + str(day) + " 일 생 여자 입니다.")
                print()
        if (sex == 3 or sex == 4):##뒷7자리중 첫자리가 3 또는 4인 경우
            if (year > 17):  # 현재 년도 보다 더 미래일수가 없다.
                print("유효하지 않은 주민등록번호입니다.")
                continue
            else:
                p_y = "20" + p_y
                if (sex == 3):#3인경우
                    print()
                    print(p_y + " 년 " + str(month) + " 월 " + str(day) + " 일 생 남자 입니다.")
                    print()
                elif (sex == 4):#4일경우
                    print()
                    print(p_y + " 년" + str(month) + " 월" + str(day) + " 일 생 여자 입니다.")
                    print()

댓글

이 블로그의 인기 게시물

About Kafka Basic

About JVM Warm up

About ZGC

Spring Boot Actuator readiness, liveness probes on k8s

About G1 GC

sneak peek jitpack

About idempotent

C 언어 구조체의 포인터 멤버 변수

Synology NAS에 MariaDB 10에 Mysql workbench로 원격접속하기

About Websocket minimize data size and data transfer cost on cloud