728x90
# 콘솔용으로 간단한 주민등록번호 검증 기능을 만들어 보았다.
1) 길이 검증
2) 숫자 포맷 검증
3) 주민등록번호 마지막 숫자(검증번호)를 이용한 검증
class RegistrationNumberVerficationManager {
private String input;
private int totalCount;
private int correctCount;
private int errorCount;
private int abnormalCount;
private Scanner sc = new Scanner(System.in);
// 생성자
public RegistrationNumberVerficationManager() {
start();
}
// 시작해주는 함수
private void start() {
System.out.println("==============================");
System.out.println(" 미래크립토 주민번호 검증 및 집계 프로그램 ");
System.out.println(" -홍길동 ");
System.out.println("==============================\n\n");
System.out.println("* 주민번호 입력 (oooooo-ooooooo 하이픈 포함 14자리, exit 입력시 종료)\n");
// count 관련 초기화 시켜주기.
totalCount = 0;
correctCount = 0;
errorCount = 0;
abnormalCount = 0;
// while문을돌면서 반복한다.
while (true) {
System.out.print(">> 데이터 입력: ");
input = sc.nextLine();
totalCount++;
// 검증메서드 실행
verify(input);
}
}
// 검증 메서드.
private void verify(String input) {
// 주민등록번호 검증
// 1. 주민번호 수치상의 오류
// 2. 길이 문제
// 3. 정상적인주민번호 인경우 - 출력
// 4. exit -> 종료 및 결과 출력
// exit입력 - 비정상입력
if (input.equals("exit")) { // exit도 비정상 입력에 포함됨.
abnormalCount++;
stop();
}
int length = input.length();
// 길이검증
if (length != 14) {
System.out.println("주민번호는 oooooo-ooooooo 하이픈 포함 14자리 입니다.\n");
abnormalCount++;
return;
}
input = input.replace("-", "");
input.trim();
int[] index = new int[13];
String[] tmp = input.split("");
// 숫자포멧 검증
for (int i = 0; i < 13; i++) {
try {
index[i] = Integer.parseInt(tmp[i]);
} catch (NumberFormatException e) {
System.out.println("-을 제외하고 모두 0 ~ 9 숫자이어야 합니다.\n");
abnormalCount++;
return;
}
}
// 검증번호를 이용한 검증
int[] check = { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
int sum = 0;
for (int i = 0; i < 12; i++) {
sum += check[i] * index[i];
}
if (index[12] == ((11 - sum % 11) % 10)) {
System.out.println("[검증 성공] 정상적인 주민번호이며 오류가 없습니다! \n");
correctCount++;
return;
} else {
System.out.println("[검증 실패] 주민 번호 수치상의 오류가 있습니다. \n");
errorCount++;
return;
}
}
// exit하는 경우 출력하는함수.
private void stop() {
System.out.println("\n\n------------------------------");
System.out.println("* 최종결과: ");
System.out.println(" -총 입력 건수: " + totalCount + "건");
System.out.println(" -정상 주민번호: " + correctCount + "건 (" + convertPercentage(correctCount)+"%)");
System.out.println(" -오류 주민번호: " + errorCount + "건 (" + convertPercentage(errorCount)+"%)");
System.out.println(" -비정상 입력: " + abnormalCount + "건 (" + convertPercentage(abnormalCount)+"%)");
System.out.println("==============================");
// 시스템 종료
sc.close();
System.exit(0);
}
// 백분율 소수점 둘째짜리까지 환산해주는 메서드
private String convertPercentage(int count) {
double result = 0.0;
result = Math.round((double)(count / totalCount) * 100);
String resultStr = String.format("%.2f", result);
return resultStr;
}
}
public class Main {
public static void main(String[] args) {
new RegistrationNumberVerficationManager();
}
}
728x90
'Backend > Java' 카테고리의 다른 글
[JAVA] ObjectStream을 이용한 Socket 통신 (0) | 2021.01.14 |
---|---|
[JAVA] 간단한 고객관리프로그램 (0) | 2021.01.04 |
[JAVA] 계산기 만들기 (0) | 2020.12.30 |
[JAVA] 객체의 직렬화, ObjectOutputStream, ObjectInputStream (0) | 2020.12.30 |
[JAVA] String, StringBuffer, StringBuilder 의 차이점 (0) | 2020.12.18 |