Jam's story

10일차 본문

Java

10일차

애플쩀 2022. 3. 2. 17:37

String 주민등록번호 

String.format
예)
String data=String.format("%s-%s-%s-%s", cardNumbers[0],cardNumbers[1],cardNumbers[2],cardNumbers[3]);

 

String.join
String card=String.join("-", cardNumbers);
뒷자리 첫번째수만 공개 

charAt(0)을 사용해서 앞자리수만공개하고 , 나머지는 String 형으로 재선언하여 처리 

toCharArray()   - 한문자마다 배열로 만들어줌 

String -> char

String 변수를 toCharArray() 메소드를 이용해서 char 한문자씩 쪼개고 char 배열에 넣어준다. 

subString(시작 인덱스, 마지막인덱스+1);

- end 인덱스를 생략하면 끝까지라는 뜻이다. 

 

char -> String 변환    new String()이용

main 메소드는 언제 호출되어지는가? 

여자인지 남자인지 확인하는 boolean getGender()

1의 아스키코드가 49이기 때문

 

1
2
3
4
제일 짧은 코딩 

주민등록번호- >생년월일 getBrith()

내 코드 

	int year=Integer.parseInt(rrn.substring(0,2));
		if (year>22) {
		year=Integer.parseInt(rrn.substring(0,2))+1900;
		}else {
			year=
					Integer.parseInt(rrn.substring(0,2))+2000;
		}
		int month=Integer.parseInt(rrn.substring(2,4));
		int day=Integer.parseInt(rrn.substring(4,6));
		String birthday=year+"년 "+month+"월 "+day+"일";
		return birthday;

	int year=Integer.parseInt(rrn.substring(0,2));
		int month=Integer.parseInt(rrn.substring(2,4)); //01->1
		int day=Integer.parseInt(rrn.substring(4,6));
		
		//네 자리의 연도로 만들기
		switch(rrn.charAt(7)-48) {
		case 0: case 9:
			year+=1800;
			break;
		case 1: case 2: case 5: case 6:
			year+=1900;
			break;
		default:
			year+=2000;
			break;
		}
		
		//String.format() 내가 원하는 형식의 문자열로 변환
		String birthday=String.format("%d년 %02d월 %d일",year,month,day);
		
		return birthday;
  • rrn.charAt(7)-48 => 인덱스가 7인곳을 추출해와서 1의 아스키코드가 49이니까 48을 뺌 

 

만나이, 세는 나이 계산 

세는나이 

더 간단하게 바꾸기 

 

 

현재 시스템의 년도를 얻어오는 코딩 

만나이 

package days10;

import java.util.Date;

/**
 * @author kenik
 * @date 2022. 3. 2. - 오후 3:01:22
 * @subject 주민등록번호 -> 성별, 생년월일,                  [ 나이 ]
 * @content 
 */
public class Ex05_05 {

   public static void main(String[] args) {
      
      /*
       * 만 나이                    - 태어날 일을 기준으로 1년이 지나야지 1살을 먹는다. 
       * 세는 나이(햇수 나이) - 태어나자마자 1살을 먹고 새해 1월1일되면 1살 더 먹는다.
       * 
       *   A사람                           2019.12.31    2020.1.1   2020.12.29   2020.12.30   2021.1.1
       *   2019.12.30 태어남         
       *   
       *                  만나이                0살              0살             0살          1살                1살              생일 지났냐? 여부
       *                  세는나이             1살               2살              2살         2살                 3살
       * */ 
      
      String rrn =  Ex05_02.getRRN(); 
      
      //int countingAge = getCountingAge( rrn );
      // System.out.println( countingAge );
      
      int americanAge = getAmericanAge( rrn );
      System.out.println( americanAge ); 
      
      
      // [질문] 메서드 차이점 - 3가지 파악( 기능, 매개변수, 리턴값 )
      // void     System.out.pritnf("출력형식", 출력값...)              기능, 매개변수 O,리턴값(리턴자료형)  void
      // String String.format("출력형식", 출력값...)                     기능, 매개변수 O,리턴값(리턴자료형)  String      
    
   } // main

   // 주민등록번호로부터 만나이를 반환하는 메서드
   private static int getAmericanAge(String rrn) {
      //  만 나이 = 올해(2022) - 생일년도 + 1 
      //  만 나이 ?  2019.1.13    2020.1.13(1살)  2021.1.13(2살)  2022.1.13(3살)
      //  계산방법 1)    몫(나이) ==  총산일수 / 365.25
      //  계산방법 2)    올해 - 생일년도                                   - 1 ( 생일 지났는지 여부 )
      //                      2022 - 2019
      //      생일이 지나지 않은 경우                         3살 -1 = 2살
      //              " 지난 경우                                    3살
       int age;  // age 나이
        Date d = new Date();
         int now =  d.getYear() + 1900; // 올해  2022         
         int yearBD =  Integer.parseInt(     Ex05_04.getBirth(rrn).substring(0, 4)    );  // 1999 <-  "1999" <-  "1999년 01월 12일"         
         age = now - yearBD ; 
         
            //     올해 3월 29일         생일 월 4월1일
         // A 학생 X
//          if (nowMonth <= monthBD && nowDate < dateBD) age -= 1;
         
         // B 학생 ( 정답 )
         // 생일 월    >= 올해 월
         //      3                4
         /*
         if(monthBD>= month) {
             if(dateBD>=date) {
                age = year-yearBD;
             }
          }else age = year -yearBD -1;
          */ 
         // 삼항연산자 age = now - yearBD -(monthBD >= month ? (dateBD >= date ? 0 :1) : 1) ;
         
         //      생일이 지나지 않은 경우의 조건식
         /*
         int monthBD =  Integer.parseInt (    Ex05_04.getBirth(rrn).substring(6, 8)  )    ; // 1        <=  "1999년 01월 12일"        
         int dateBD =  Integer.parseInt(Ex05_04.getBirth(rrn).substring(10, 12));             // 12
         int month = d.getMonth() + 1;  //   1월(0) ~ 12월(11) 
         int date = d.getDate();
         if( !( monthBD>= month  && dateBD>=date ) )   age--;
         */
         
         // C 학생           "890112-XXXX" 비전공자
         int birthMD =  Integer.parseInt( "0112") ;  // 112
         int nowMD = Integer.parseInt( "0302" );  // 302         
         if(  birthMD  < nowMD )  age--;
         
         // 강사          Date 클래스의 객체
         // true/false 생일날짜객체.before(  현재날짜객체 )
         // d.after(d2)
         // d.before(d)
         
         // 
      return age;
   }


   private static int getCountingAge(String rrn) {      
       // 세는 나이 = 올해(2022) - 생일년도 + 1 
        int age;  // age 나이
        Date d = new Date();
         int now =  d.getYear() + 1900; // 올해  2022
         int yearBD =  Integer.parseInt(     Ex05_04.getBirth(rrn).substring(0, 4)    );  // 1999 <-  "1999" <-  "1999년 01월 12일" 
         age = now - yearBD + 1;  // 2022 - 1989 + 1
         return age;
   }

} // class
과제 주민등록번호 -> 출생지역 출력 

 

주민번호 검증 규칙 

	int[] m= {2,3,4,5,6,7,8,9,2,3,4,5};
		int tot=0;
		for(int i=0; i<=12; i++) {
			if(i==6) continue;
			tot+=Integer.parseInt(rrn.substring(i,i+1))*m[i];
		}
		int ㅍ=11-(tot%11)%10;
		

	      int ㅎ =  Integer.parseInt(  rrn.substring(13, 14) ) ;
	             
	      if( ㅍ ==  ㅎ ) System.out.println( "올바른 주민등록번호 입니다.");
	      else                System.out.println( "잘못된 주민등록번호 입니다.");

-를 0으로 설정해놓으면 if continue 문 안써도됨 

'Java' 카테고리의 다른 글

12일차  (0) 2022.03.04
11일차  (0) 2022.03.03
9일차  (0) 2022.02.25
8일차  (0) 2022.02.24
7일차  (0) 2022.02.23
Comments