Notice
Recent Posts
Recent Comments
Archives
반응형
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Total
01-23 09:15
250x250
관리 메뉴

꿈꾸는 개발자의 블로그

[Java] 정규 표현식을 이용한 개인정보 마스킹 처리 본문

Programming/Java

[Java] 정규 표현식을 이용한 개인정보 마스킹 처리

aldrn29 2023. 8. 28. 17:34

개인정보 보안 이슈에 대하여 마스킹 처리 구현을 맡았다. 마스킹 처리에는 다양한 방법이 있겠지만, 정규 표현식에 대해 공부도 해볼겸! 이를 활용해서 마스킹 처리를 해보았다. 

 

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
Comments