본문 바로가기

📚Study Note/JAVA

[ JAVA ] 주민등록번호 유효성 검사(...는 이제 안됨)

 

○ 주민번호 검증 공식 

① 마지막 자리를 제외한 앞자리 수를 규칙에 맞게 곱한다.

  1 2 34 59 - 12 3 4 5 67( → 주민번호)
  * * * * * * - * * * * * * *
  234567  892345  ( → 각 자리에 곱해진 수)

② 규칙에 맞게 곱셈 연산을 수행한 결과를 모두 더한다.

ex 7 5 0 6 1 5 - 1 8 6 2 1 3 3

    * *  * *  * * - * *  * *  *  * 
   2 3 4 5 6 7 - 8 9 2 3 4 5 
--------------------------------------------

   14 + 15+ .... 12+ 15

   ==217

③ 더해진 결과물을 11로 나누어 『 나머지』 를 구한다.

   217 % 11 → 8

④ 11에서 나머지를 뺀 결과값을 구한다.  
   11 - 8 → 3 



<예외 : 4를 수행한 결과 11이나 10이 나오게되었을 경우 즉 3의 수행결과 나머지가 0이나 1일 경우에는 
해당 값을 10으로 나눈 나머지를 얻어낸다.>
⑤  ④ 에서 처리한 연산 결과가 주민번호를 구성하는 마지막 숫자와 일치하는지 비교한다. 
※ 마지막 숫자와 같은 경우 유효한 주민등록번호!이다. 

 

 

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Test101
{
	public static void main(String[] args) throws IOException
	{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));///

		//입력받은 주민번호
		
		String str;

		//주민번호를 대상으로 곱해지는 수 배열 구성, ★사이에 하이픈 자리에 0을 넣어줘서 차례대로 곱해지게 한다.
		int [] chk = {2,3,4,5,6,7, 0, 8,9,2,3,4,5};

		//곱셈 연산 후 누적합
		int tot = 0;

		// 사용자에게 안내 메세지 출력 및 주민번호 입력받기
		System.out.print("주민번호 입력(xxxxxx-xxxxxxx) : ");
		str = br.readLine();
		
		if (str.length() != 14)
		{
			System.out.println(">> 입력오류(자리값 오류)");
			return; //메소드 종료 → 프로그램 종료
		}

		//확인 (테스트)
		//System.out.println("자릿수가 적합한 상황");

		for (int i=0; i<chk.length; i++)
		{	
			if (i==6) 
				continue; 

			tot += chk[i] * Integer.parseInt(str.substring(i,i+1));
		}

		//System.out.println(tot);//확인(테스트)

		int su = 11 - tot%11; //연산순서는 % , - , =

		//테스트(확인)
		//System.out.println(su);

		//최종 결과 출력 이전에 추가 연산 필요!

		// → su에 대한 연산 결과가 두 자리로 나올 경우 주민번호 마지막 자릿수와 비교할 수 없는 상황
		su = su%10;          //★ 조건문 필요없다. 10, 11 이 아니더라도 그 수 자체가 나머지가 될 것이기 때문이다.

		//최종 결과 출력
		if (su == Integer.parseInt(str.substring(13)))//★ 변수(숫자) 하나만 쓰면 그 위치에서부터 문자열 끝까지 출력
			System.out.println(">>정확한 주민번호");
		else
			System.out.println(">>잘못된 주민번호");

	}
}

/*
주민번호 입력(xxxxxx-xxxxxxx) : 123
>> 입력오류(자리값 오류)
계속하려면 아무 키나 누르십시오 . . .


주민번호 입력(xxxxxx-xxxxxxx) : 123456-1234567
>>잘못된 주민번호
계속하려면 아무 키나 누르십시오 . . .

*/