Test109 주민등록번호 유효성 검사 프로그램
○ 주민등록번호 검증 공식
① 마지막 자리를 제외한 앞자리 수를 규칙에 맞게 곱한다
123456-123456(7) (주민번호)
----------------------------------- 각 자릿수에 곱하기
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 + 0 + 30 + 6 + 35 + 8 + 72 + 12 + 6 + 4 + 15
== 217
③ 더해진 결과값을 11로 나누어 『나머지』를 취한다.
19
--------
11| 217
11
---------
107
99
---------
8 → 나머지
④ 11에서 나머지(8)을 뺀 결과값을 구한다.
11 - 8 → 3
※ ③의 처리 과정에서 나머지가 0인 경우 → 11 - 0 → 11 → 1
1인 경우 → 11 - 1 → 10 → 0
이를 다시 10으로 나누어 나머지를 취한다.
⑤ ④의 연산 결과가 주민번호를 구성하는 마지막 숫자와
일치하는지의 여부를 확인한다.
일치 → 유효한 주민번호
불일치 → 잘못된 주민번호
실행 예)
주민번호 입력(xxxxxx-xxxxxxx) : 123456-12345678 → 입력 갯수 초과
>> 입력 오류
계속하려면 아무 키나 누르세요...
주민번호 입력(xxxxxx-xxxxxxx) : 123456-123456 → 입력 갯수 미달
>> 입력 오류
계속하려면 아무 키나 누르세요...
주민번호 입력(xxxxxx-xxxxxxx) : 750615-1252085 → 유효한 주민번호
>> 정확한 주민번호~!!!
계속하려면 아무 키나 누르세요...
주민번호 입력(xxxxxx-xxxxxxx) : 750615-1252084 → 유효한 주민번호
>> 잘못된 주민번호~!!!
계속하려면 아무 키나 누르세요...
추가 팁~!!!
배열.length → 배열의 길이(배열방의 갯수) 반환
문자열.length() → 문자열의 길이 반환
문자열.substring() → 문자열 추출
/*=======================================
■■■ 주민등록번호 유효성 검사 ■■■
========================================*/
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Test109
{
public static void main(String[] args) throws IOException
{
// BufferedReader 인스턴스 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력받는 주민번호(문자열 형태)
String str;
// 주민번호의 각 자릿수에 고바게 될 수 → 배열 형태로 구성
// 7 5 0 6 1 5 - 1 8 6 2 1 3 3
// * * * * * * * * * * * *
int[] chk = {2,3,4,5,6,7, 0 ,8,9,2,3,4,5};
// ---
// check~!!!
// 곱셈 연산 후 누적합 (각 곱셈 결과를 더해 나가라...
int tot = 0;
System.out.print("주민번호 입력(xxxxxx-xxxxxxx) : ");
//str = Integer.parseInt(br.readLine());
str = br.readLine();
if (str.length() != 14)
{
System.out.println(">> 입력 오류~!!!");
return; //-- 메소드종료 → main() 메소드 종료 → 프로그램 종료
}
// 테스트
//System.out.println(">> 자릿수 적합");
// ex) 750615-1252085
for (int i = 0; i < 13; i++)
{
if(i == 6)
continue; //-- 뒷부분 무시하고... 계속해라...
// ------
// line 162
//chk[i] * Integer.parseInt(주민번호 특정 자릿수 추출);
tot += chk[i] * Integer.parseInt(str.substring(i, i + 1));
}
//------------ 여기까지 수행하면 ①과 ②를 모두 끝낸 상황이며
// 규칙에 맞게 곱셈 연산을 수행한 결과를 모두 더한 값은
// 변수 tot 에 담겨있는 상황이 된다.
// ③ ④ 관련 연산 수행
int su = 11 - tot % 11;
// 테스트(확인)
//System.out.print(su);
// 최종 결과 출력 이전에... 추가 연산 필요~!!!
// su에 대한 연산 결과가 두 자리로 나올 경우
// 주민번호 마지막 자리의 숫자와 비교할 수 없는 상황
su = su % 10; // su % 10
if (su == Integer.parseInt(str.substring(13)))
{
System.out.println(">> 정확한 주민번호~!!!");
}
else
{
System.out.println(">> 잘못된 주민번호~!!!");
}
}
}
// 실행 결과
/*
주민번호 입력(xxxxxx-xxxxxxx) : 940603-*******
>> 정확한 주민번호~!!!
계속하려면 아무 키나 누르십시오 . . .
*/
'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
Test115 정렬 알고리즘 응용 (1) | 2020.09.10 |
---|---|
Test110 ~ 114 정렬 알고리즘 (0) | 2020.09.07 |
Test108 만년달력 프로그램 (0) | 2020.09.07 |
Test099~100 배열의 복사 (0) | 2020.09.06 |
Test098 배열과 난수 처리 (0) | 2020.09.06 |