ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 과제4. 주민등록번호 생성 프로그램
    백엔드 스쿨/Java 2023. 11. 12. 18:34

     

     

    목적

    Scanner의 입력함수와 조건문 및 Random클래스를 통한 주민번호 생성 로직 작성

    입력값은 2020년도 이후로 입력한다는 전제로 작성

     

    1. 주민등록번호 생성 로직에 맞게 주민등록번호 생성

    2. 입력값은 생년, 월, 일, 성별과 임의의 번호를 통해서 생성

    3. 임의번호는 Random함수의 nextInt()함수를 통해서 생성 (임의 번호 범위는 1 ~ 999999사이의 값으로 설정)

     

    주민등록번호 생성 로직

    YYMMDD-GRRRRRR (YY-연도, MM-월, DD일, G-성별, R임의의 숫자)

     

    콘솔 예시

     

    코딩 방법 구상

    Scanner 입력 함수로 수치 입력을 받도록 작성.

    입력값이 2020년 이후가 전제이므로 성별을 표기하는 숫자는 남자가 3, 여자가 4가됨

    -> 조건문을 통해 m/f 를 판단하여 3 혹은 4값을 표기해야함

    출생연도를 4자리수로 받기 때문에 앞의 두자리를 버리고 뒤의 두자리만 받을 필요가 있음.

    -> 연산을 통해 앞자리를 날릴것인지, 문자열로 입력을 받아서 뒤의 두자리만 남길 것인지 선택.

    임의의 숫자 6자는 1~999999 사이의 값이 필요.

     

    출생년도에서 필요한건 10의 자리와 1의 자리수이고 100의 자리수부터는 필요가 없으므로 100으로 나눈 나머지 값을 취하면 원하는 값을 취할 수 있다.
    월 일의 경우 그대로 사용하면 되므로 추가적인 작업이 필요 없음.
    성별의 경우 2020년 이후를 입력하는게 전제이므로 m, f에 맞춰서 필요한 숫자를 저장하도록 조건문을 사용.
    Random 함수를 6자리 임의의 숫자를 생성.

    연월일의 경우 1자리 수가 있으므로 빈자리를 0으로 채우기 위해 %02d 형태의 포맷을 적용, 성별 뒤의 6자리 숫자의 경우 역시 6자리로 표시해야 하므로 %06d 포맷을 사용함.

     

    import java.util.Random;
    import java.util.Scanner;
    
    public class JavaStudy04 {
        public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		Random rd = new Random();
    		
    		
    		System.out.println("[주민등록번호 계산]");
    		
    		System.out.print("출생년도를 입력해 주세요.(yyyy):");
    		int year = sc.nextInt();
    		sc.nextLine();
    		
    		int yearNum = year % 100;
    						
    		System.out.print("출생월을 입력해 주세요.(mm):");
    		int month = sc.nextInt();
    		sc.nextLine();
    				
    		System.out.print("출생일을 입력해 주세요.(dd):");
    		int day = sc.nextInt();
    		sc.nextLine();
    						
    		System.out.print("성별을 입력해 주세요.(m/f):");
    		String gender = sc.next();
    		sc.nextLine();
    		
    		int genNum = 0 ;
    		
    		if(gender.equals("m"))
    			genNum = 3;
    		else if(gender.equals("f"))
    			genNum = 4;
    		
    		
    		System.out.printf("%02d%02d%02d - %d%06d\n", yearNum, month, day, genNum, rd.nextInt(1000000));
    		
    			
    	}
    }

     

     

    while 구문을 이용하면 범위 외의 데이터가 입력되는 경우 재입력을 받을수 있게끔 하는 방법도 구현이 가능할 것 같다.

    추후에 예제를 좀더 변형해 보기로. 

Designed by Tistory.