입력받은 값이 주민등록번호로써 유효한지 체크해주는 프로그램
boolean값으로 check를 true로 넣고, 들어오면 안 되는 값들이 들어왔을 시에 각각 조건문에서 false를 반환해준다.
첫번째는 숫자만 들어와야 하기 때문에 checkDigit 함수를 따로 만들어서 걸러준다
(주민번호 가운데에 '-'가 있기 때문에, 코드가 조금 길어져서 따로 메서드를 만들어주었다)
그리고 길이가 알맞지 않았을 때,
7번째 자리에 '-'가 들어가지 않았을 때,
3번째 자리에 1보다 값이 커졌을 때 (달은 12월까지밖에 없어서),
4번째 자리에 (3번째 자리가 1인데 4번째가 2보다 클 때),
주민번호 뒷자리에서
뒷자리 첫 번째 수가 4보다 커졌을 때(성별 체크),
그리고 각 월마다 최대 일수가 30일, 31일 다르므로 따른 메서드 checkDay를 통해 걸러주고,
2월일 경우에는 윤년이 껴있어서 이것 또한 따른 메서드 leeapYearCheck로 걸러주었다
모든 것을 체크하고
check 가 true 일 때와, 아닐 때를 반환하였다
(삼항 연사자를 쓰면 더 깔끔했을 것 같다 )
checkDay 메서드에는
최대 일수가 30일인 달 / 31일인 달을 구분해서 배열 안에 넣어주었고,
각각의 달에 최대 일수를 넘어가면 boolean 값으로 넣어준 day를 false로 반환하였다
그리고 체크했을 때 정상적으로 들어간 값이라면 true를 반환해준다
checkDigit 메서드에는
7번째 자리에 위치한 '-'를 제외하고
나머지 숫자가 숫자인지 판별하는 Character.isDigt 함수를 사용하여 숫자인지 체크해주었고,
모든 것은 반복문 안에서 한 글자씩 검사하는 식으로 진행하였다
그리고 체크했을 때 정상적으로 들어간 값이라면 true를 반환해준다
(배열을 쓰면 for each문으로 한 개씩 꺼내와야하는데, 생각해보면 HashMap을 사용하면 한개씩 값을 안 꺼내와도
contains로 들어가 있는지 체크가 가능했다)
윤년 체크는 leeapYearCheck 메서드로 만들었고,
Integer.parseInt 함수를 사용하여 String 안에 들어있었던 값들을 int 형식으로 반환하여 비교하였다
성별에 1이나 2가 들어가면
(3보다 작으면으로 하면 코드가 더 짧아졌음)
1900을 더해주었고
그렇지 않으면 2000을 더해주었다 (이 부분도 굳이 else if를 사용할 필요 없었다)
( 전체적으로 삼항 연산자를 사용했으면 한 줄로 끝났을 것 같다 )
그리고 내려온 year 값에 윤년 계산기를 넣어주어 값이 일치하면 leeapYear를 true로 반환해주었다
마지막으로 메인에서 테스트해보면 끝!
'TIL > Java' 카테고리의 다른 글
Java 행사 이벤트 출력하기 (0) | 2021.08.04 |
---|---|
Java 차량5부제 코드 만들기 (0) | 2021.08.04 |
Java 핸드폰번호 유효성 체크 (0) | 2021.08.03 |
Java 학교 (학생들의 성적표 만들기) (0) | 2021.08.03 |
Java 섯다 게임 구현하기 (1) | 2021.08.03 |