본문 바로가기

카테고리 없음

주민등록번호 유효성 검사 (. ❛ ᴗ ❛.)

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
>>잘못된 주민번호
계속하려면 아무 키나 누르십시오 . . .

*/

물론 이제는 이 규칙대로 주민번호가 만들어지지는 않는다. 

 

[출력 결과]

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


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