입력받은 주민등록번호 유효성 검사

조건

주민 번호를 입력받아 올바른 주민번호인지 아닌지 체크해서 출력하는 프로그램을 작성한다.
입력받은 주민번호가 숫자가 아니면 오류체크하고 재입력 받는다.

주빈등록번호 검증

  1. 합 = 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…)
    • 곱한 값들을 모두 더한다.
  2. 나머지 = 합 % 11
    • 곱한 값들을 더한 결과를 11로 나누어 나머지를 구한다.
  3. 체크디지트 = 11 - 나머지
    • 나머지값이 0이면 체크디지트는 11 → 1로 처리
    • 나머지값이 1이면 체크디지트는 10 → 0으로 처리
    • 참고 : 11 - 나머지 값이 주민번호 끝 자리와 같으면 유효한 주민번호이다.
  4. 최종 체크 디지트와 실제 체크 디지트를 비교
    • 주민번호 유효성 : 체크 디지트가 일치하면 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));을 작성해야 한다.

🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.

태그:

카테고리:

업데이트:

댓글남기기