본문 바로가기

TIL/Java

Java 주민등록번호 유효성 체크

반응형

입력받은 값이 주민등록번호로써 유효한지 체크해주는 프로그램

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