입력받은 주민등록번호 유효성 검사
조건
주민 번호를 입력받아 올바른 주민번호인지 아닌지 체크해서 출력하는 프로그램을 작성한다.
입력받은 주민번호가 숫자가 아니면 오류체크하고 재입력 받는다.
주빈등록번호 검증
- 합 = 1*2 + 2*3 + … + 6*5
- 주민번호 (ex : 123456-1234567) 마지막 자리를 제외한 앞자리 수를 각각 차례대로 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 로 곱한다. (ex : 1*2, 2*3, 3*4…)
- 곱한 값들을 모두 더한다.
- 나머지 = 합 % 11
- 곱한 값들을 더한 결과를 11로 나누어 나머지를 구한다.
- 체크디지트 = 11 - 나머지
- 나머지값이 0이면 체크디지트는 11 → 1로 처리
- 나머지값이 1이면 체크디지트는 10 → 0으로 처리
- 참고 : 11 - 나머지 값이 주민번호 끝 자리와 같으면 유효한 주민번호이다.
- 최종 체크 디지트와 실제 체크 디지트를 비교
- 주민번호 유효성 : 체크 디지트가 일치하면 O, 일지하지 않으면 X
입력 형식
주민번호 입력 => 123456-1234563
출력 형식
주민번호 : 123456-1234563 (O)
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.Scanner;
public class Example_PersonNumber {
public static void main(String[] args) {
int i, w=2, chk, hap=0;
String ju;
Scanner sc = new Scanner(System.in);
while(true) { //주민번호 입력 검사 시작
System.out.print("주민번호 입력 => ");
ju = sc.next();
if (!input_check(ju)){
System.out.println("주민번호 입력 오류!!");
continue;
}
else
break;
} //주민번호 입력 검사 끝
for(i=0; i<ju.length()-1; i++) {
if (i==6) //'-'d은 합계 계산에서 스킵
continue;
hap += Integer.parseInt(ju.substring(i,i+1)) * w; //w : 가중치
w++;
if(w==10)
w=2; //w가 9 다음은 2
}
chk = 11 - hap % 11; //11로 나누면 0이나 1이기 때문
if (chk ==10)
chk = 0;
else if (chk == 11)
chk = 1;
if (chk == Integer.parseInt(ju.substring(13,14)))
System.out.println("주민번호 : " + ju + " (O)");
else
System.out.println("주민번호 : " + ju + " (X)");
}
static boolean input_check(String str) {
char ch;
if (str.length() != 14) //입력받은 문자열이 14자리인지 검사
return false;
//문자열을 전달 받아 문자열 길이만큼 한 문자씩 검사
for (int i = 0; i < str.length(); i++) {
ch = str.charAt(i);
if (i == 6) { //'-'인지 검사
if (ch != '-')
return false;
} else if (i == 7) { //성별 값 검사
if (!(ch == '1' || ch == '2' || ch == '3' || ch == '4'))
return false;
} else if (ch < '0' || ch > '9') //ch가 숫자인지 검사(유니코드로 비교)
return false;
}
return true; //메서드 호출 시 false가 되야만 오류 실행문 break
}
}
(int) code.charAt(i) 는 문자열에서 문자를 뽑고 int형으로 바꾸어 유니코드 int형식으로 출력하기 때문에 Integer.parseInt(code.substring(i,i+1));
을 작성해야 한다.
🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.
댓글남기기