개인정보 보안 이슈에 대하여 마스킹 처리 구현을 맡았다. 마스킹 처리에는 다양한 방법이 있겠지만, 정규 표현식에 대해 공부도 해볼겸! 이를 활용해서 마스킹 처리를 해보았다.
정규 표현식을 이용한 개인정보 마스킹 처리
핸드폰 번호 마스킹
입력 문자열의 형식이 {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
}
}
참고 블로그
https://girawhale.tistory.com/77
[Java] Pattern, Matcher Class 사용법과 메소드 정리
자바에서는 정규식을 활용해 문자열을 검증, 탐색을 돕는 Pattern, Matcher 클래스를 제공해준다. 다음에도 쉽게 활용할 수 있도록 정리하려고 한다. 👨🏫 클래스 분석 Pattern 정규 표현식이 컴파
girawhale.tistory.com
[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리)
안녕하세요. 소다맛사탕 입니다. 지난 포스팅 '[java] 휴대폰 번호, 계좌번호, 이름 마스킹(masking)'의 버전2, 정규식을 이용한 마스킹을 알아보겠습니다. ※ 정규식(또는 정규표현식) ; 텍스트 데이
develop-sense.tistory.com
📚 JavaScript 정규 표현식 문법 총정리 + 응용 예제
정규 표현식(Regular Expression) 정규식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용된다. 대표적으로 입력칸에 전화번호나 이메일을 입력하라고 했을때 옳지 않은
inpa.tistory.com
'Programming > Java' 카테고리의 다른 글
[Java] 오프라인(사내망/폐쇄망) 환경에서 Maven 구성하는 방법 (0) | 2025.03.20 |
---|---|
[Java] 외부 WAS에 Spring Boot 프로젝트(WAR 파일) 배포를 위한 설정 : 톰캣(tomcat) 제거하기 (0) | 2025.02.25 |
[Error] Java : Import 후 bootstrap, js 파일 에러 해결하기 (0) | 2024.02.27 |
[Java] 문자열에서 특정 문자 삭제/변환하기 : replace(), replaceAll() (0) | 2023.11.23 |
[Java] Calendar, Date, SimpleDateFormat : 두 날짜 간 차이 계산하기 (0) | 2023.10.24 |