○ 주민번호 검증 공식
① 마지막 자리를 제외한 앞자리 수를 규칙에 맞게 곱한다.
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
>>잘못된 주민번호
계속하려면 아무 키나 누르십시오 . . .
*/
'📚Study Note > JAVA' 카테고리의 다른 글
[ JAVA ]정렬 (Sort) 알고리즘 : 버블 정렬 (Bubble Sort) (0) | 2021.03.27 |
---|---|
[ JAVA ] 정렬 (Sort) 알고리즘 : 선택 정렬 (Selection Sort) (0) | 2021.03.27 |
[ JAVA ] 배열을 활용한 만능달력 (0) | 2021.03.27 |
[ JAVA ] 배열 (Array)의 복사, 합집합 출력 (0) | 2021.03.27 |
[ JAVA ] 배열의 복사 - 얕은복사와 깊은복사 (주소값 복사와 데이터복사) (0) | 2021.03.26 |