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