import java.util.regex.Pattern;
/**
*
* <PRE>
* [실습] 주어진 개인정보를 마스킹하여 출력한다.
*
* - 이름은 첫 글자와 마지막 글자만 남기고 나머지 글자를 마스킹 처리한다.
* - 주민등록번호는 생년월일과 성별 부분만 남기고 나머지 숫자를 마스킹 처리한다.
* - 카드 정보는 총 16자리 중, 앞의 6자리만 남기고 나머지 숫자를 마스킹 처리한다.
*
*
* [실행 결과]
* 김아무개 >> 김**개
* 801104-1042758 >> 801104-1******
* 1234-2345-3467-4578 >>1234-23**-****-****
*
* </PRE>
*
* @author 74765
* @version 1.0
*/
public class Test01 {
private static final String result_name = "결과 : %s >> %s";
private static final String result_juminNo = "결과 : %s >> %s";
private static final String result_cardNo = "결과 : %s >> %s";
public static void main(String[] args) {
// 시작시간 기록
long startTime = System.currentTimeMillis();
// STEP 1. TEST 데이터 준비
String original_name = "김아무개";
String original_juminNo = "801104-1042758";
String original_cardNo = "1234-2345-3467-4578";
// STEP 2. 실행
String masking_name = MaskingInfo(original_name);
System.out.println(String.format(result_name, original_name, masking_name));
String masking_juminNo = MaskingInfo(original_juminNo);
System.out.println(String.format(result_juminNo, original_juminNo, masking_juminNo));
String masking_cardNo = MaskingInfo(original_cardNo);
System.out.println(String.format(result_cardNo, original_cardNo, masking_cardNo));
// 종료시간 기록
long endTime = System.currentTimeMillis() - startTime;
System.out.println("소요시간 : " + endTime + "ms.");
}
/**
*
* <PRE>
* 주어진 개인정보를 마스킹하여 출력한다
* </PRE>
*
* @param originalStr
* : 입력 문자열
* @return 마스킹 처리된 문자열
*/
public static String MaskingInfo(String originalStr) {
// STEP 0. 패턴 준비
String regx_name = "^[가-힣]{2,}$";
String regx_juminNo = "^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$";
String regx_cardNo = "^\\d{4}[-]\\d{4}[-]\\d{4}[-]\\d{4}$";
// STEP 1. 들어온 문자열 분리
int length = originalStr.length();
char[] characters = originalStr.toCharArray();
// STEP 1-1. 이름 마스킹 처리
if (Pattern.matches(regx_name, originalStr)) {
for (int inx = 1; inx < length - 1; inx++) {
characters[inx] = '*';
}
// STEP 1-2. 주민번호 마스킹 처리
} else if (Pattern.matches(regx_juminNo, originalStr)) {
for (int inx = 8; inx < length; inx++) {
characters[inx] = '*';
}
// STEP 1-3. 카드번호 마스킹 처리
} else if (Pattern.matches(regx_cardNo, originalStr)) {
for (int inx = 7; inx < length; inx++) {
if (characters[inx] != '-') {
characters[inx] = '*';
}
}
}
// STEP 2. 결과 반환
return String.valueOf(characters);
}
}