사용가능한 주민등록 번호인지 체크하여주는 문제이다
설명하기에 앞서 사용되는 주민등록 번호의 기본적인 구성과 메서드들부터 설명한다
주민번호에 대한 기본설명
1.주민번호의 앞 2자리는 태어난 년도이다 예) 1996년생 주민번호 앞 2자리는 96XXXX
2.주민번호의 3,4번째 자리는 태어난 월에대한 값이다 9605XX
3.주민번호의 5,6번째 자리는 태어난 일에대한 값이다 960503
4.주민번호의 뒷자리 첫번째 자리는 태어난 년도의 성별을 의미한다
예)1900년도생 남자 960503 - 1 여자 960503 - 2
예)2000년도생 남자 000503 - 3 여자 000503 - 4
HashSet<Integer> month30 , month31을 스태틱 블록으로 초기화하며 준다
month30은 마지막 일이 30일이되는 해당 월 값들을 넣어주고
month31은 마지막 일이 31일이되는 해당 월 값들을 넣어준다
2월은 윤년이 껴있기에 28일 또는 29일로 나뉘어지기 때문에 나중에 따로 계산하여준다
[validGender()] 메서드는 입력받은 주민등록 번호 뒷자리의 첫번째 번호가 1~4번인지 체크하여 주는 기능을 한다
1과 같거나 크고 4와 같거나 작은지 체크
[calcYear()] 메서드는 입력받은 주민번호의 첫번째자리와 두번째자리 + 주민번호 뒷자리 1번째 값을 통해
96년 뒷자리 1번 이라면 1996년 이라는 년도값을 리턴하여준다
1. year 변수에 [calcYear()]메서드를 통해 주민번호 앞2자리와 뒷 첫번째 자리 값을 넣어
몇년도에 태어났는지 체크하여준다
2.month 변수에 몇월에 태어났는지 주민번호 3,4번째 자리값을 넣어준다
3.date 변수에 몇일에 태어났는지 주민번호 5,6번째 자리값을 넣어준다
4. [validGender()] 메서드를 통하여 트루가 넘어왔을시에 !를 통하여 false로 바꿔 if문을 패스하게하며
만약 false가 들어왔을지 !를 통해 true로 바꿔 성별에 문제가 있음을 알려준다.
5. month의 값을 contains를 통하여 해쉬셋month30에 같은 월이 있는지 확인하여주고
만약 1보다 작고 30보다 크다는 조건을 넣어주어서 이 조건이 true가 되면 문제가 있는것이고
false라면 그냥 지나친다
즉 month30일때는 1보다 작고 30보다 크지만 않으면 문제 없다는 것이다
6. month31은 month30의 조건과 하루차이가 난다는 것을 제외하면 같다
7.만약 month가 2월 일때에는 윤년인지를 판별하며
윤년 공식 : (boolean leapYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);)
윤년이라면 1보다 작지않고 29보다 숫자가 크지않다면 무사히 패스되어 주민번호가 유효하게되며
윤년이 아닐때에는 1보다 작지않고 28보다 숫자가 크지않다면 무사히 패스되어 마지막에 true를 리턴하여
유효한 주민번호인지 알려준다.
블로그 포스팅을 하며 체크하다보니 오류가 하나있었다..
젠더체크에서 1900년도생인지 2000년도 생인지 구별하여
1,2 인지 3,4인지 체크하는 부분을 만들어 주지않았다.....!!!
이 조건은 쉽게 넣을수 있으니 패스!
'공부 > Java 복습' 카테고리의 다른 글
Java 달력 만들기 (0) | 2021.08.13 |
---|---|
Java 핸드폰 번호 검사 (0) | 2021.08.12 |
Java 행 맨 게임 콘솔 출력 버전 (0) | 2021.07.31 |
스윙을 이용한 퍼즐 만들기 (0) | 2021.07.29 |
Lotto 로또 당첨 게임 (0) | 2021.07.22 |