꿈꾸는 개발자의 블로그
[Java] 정규 표현식을 이용한 개인정보 마스킹 처리 본문
개인정보 보안 이슈에 대하여 마스킹 처리 구현을 맡았다. 마스킹 처리에는 다양한 방법이 있겠지만, 정규 표현식에 대해 공부도 해볼겸! 이를 활용해서 마스킹 처리를 해보았다.
728x90
정규 표현식을 이용한 개인정보 마스킹 처리
핸드폰 번호 마스킹
입력 문자열의 형식이 {2~3}-{3~4}-{4}자릿수이고, '-'(하이픈)이나 ')'(괄호)가 있으나 없으나 숫자 길이와 형식이 맞다면, 가운데 자리와 마지막 자리의 첫 번째 글자까지 마스킹 처리한다.
* 정규식 문법 : \d는 숫자를 의미, {} 안의 숫자는 개수를 의미한다.
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String maskingStr = "010-1234-5678";
String maskingResult = "";
String regex = "(\\d{2,3})[-/)]?(\\d{3,4})-?(\\d{4})$";
Matcher matcher = Pattern.compile(regex).matcher(maskingStr);
if (maskingStr.length() >= 3) {
if (matcher.find()) {
String target = matcher.group(2);
int length = target.length();
char[] c = new char[length];
Arrays.fill(c, '*');
maskingResult = maskingStr.replace(target, String.valueOf(c));
maskingResult = maskingResult.substring(0, matcher.start(3)).concat("*").concat(maskingStr.substring(matcher.start(3)+1, maskingStr.length()));
}
} else {
maskingResult = maskingStr;
}
System.out.println(maskingResult); // 010-****-*678
}
}
이름 마스킹
이름이 3글자 이상이라면 앞 2자리를 제외하고 마스킹 처리하고, 외자라면 끝자리만 마스킹 처리한다.
* 정규식 문법 : (?<=) 긍정형 후방탐색
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String maskingStr = "아리엘";
String maskingResult = "";
if (maskingStr.length() >= 3) {
maskingResult = maskingStr.replaceAll("(?<=.{2}).", "*");
} else { // 외자인 경우
maskingResult = maskingStr.replaceAll("(?<=.{1}).", "*");
}
System.out.println(maskingResult); // 아리*
}
}
계좌번호 마스킹
계좌번호는 은행마다 형식과 자릿수가 다르기 때문에 숫자로만 입력받아서, 계좌번호가 7글자 이상이라면 앞 4자리와 뒤 2자리를 제외하고 마스킹 처리한다.
* 정규식 문법 : (?<=) 긍정형 후방탐색, (?=) 긍정형 전방탐색
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String maskingStr = "1004865000012";
String maskingResult = "";
if (maskingStr.length() >= 7) {
maskingResult = maskingStr.replaceAll("(?<=.{4}).(?=.{2})", "*");
} else {
maskingResult = maskingStr;
}
System.out.println(maskingResult); // 1004*******12
}
}
이메일 마스킹
이메일 주소 앞 3자리를 제외하고 '@' 전까지 마스킹 처리한다.
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String maskingStr = "abcd1234@gmail.com";
String maskingResult = "";
if (maskingStr.length() >= 3) {
maskingResult = maskingStr.replaceAll("(?<=.{3}).(?=.*@)", "*");
} else {
maskingResult = maskingStr;
}
System.out.println(maskingResult); // abc*****@gmail.com
}
}
참고 블로그
728x90
728x90
'Programming > Java' 카테고리의 다른 글
[Error] Java : Import 후 bootstrap, js 파일 에러 해결하기 (0) | 2024.02.27 |
---|---|
[Java] 문자열에서 특정 문자 삭제/변환하기 : replace(), replaceAll() (0) | 2023.11.23 |
[Java] Calendar, Date, SimpleDateFormat : 두 날짜 간 차이 계산하기 (0) | 2023.10.24 |
Comments