java 정규식 개인정보 마스킹
개인정보 마스킹에 사용할 java정규식 정리
1. 주민번호
ex> 811008-1000000 -> 811008-1******
tempStr.replaceAll("(.{6}$)", "******") => 6자리 숫자로 끝나는 문자를 * 6자리로 변경
tempStr = "저의 주민번호는 801208-1000000 입니다.";
- 숫자6자리-1~4한자리숫자6자리 정보중 마지막6자리를 *으로 변경
tempStr.replaceAll("([0-9]{6})-([1-4]{1})([0-9]{6})", "$1-$2******");
2. 전화번호
ex> 010-0000-0000 -> 010-****-0000
tempStr.replaceAll("-[0-9]{4}-", "-****-") => -으로 시작하고 4자리 숫자-으로 끝나는 문장을 -****- 으로 변경
ex> 010-0000-0000 -> 010-0000-****
tempStr.replaceAll("-[0-9]{4}$", "-****") => -으로 시작하고 4자리 숫자로 끝나는 부분을 -**** 으로 변경
3. 이메일
ex> test12345@naver.com -> ******@naver.com
tempStr.replaceAll("[a-z,A-Z,0-9]+@", "******@") => @이 마지막에 포함된 문장을 *****@으로 변경
->주간만 변경 해야 하는경우가 있어서 갱신 예정
4. 이름
ex> 홍길동 -> 홍길* or 홍**
tempStr.replaceAll("(?<=.{2}).", "*") => 길이 기준으로 2글자 이후의 문자는 *으로 변경
tempStr.replaceAll("(?<=.{1}).", "*") => 길이 기준으로 1글자 이후의 문자는 *으로 변경
앞에만 변경 하려는 경우
tempStr.replaceAll(".(?=.{2})", "*") => 길이 기준으로 2글자 남기고 앞에만 *으로 변경(*길동)
위에서 사용한 정규식의 경우 전방탐색, 후방탐색에 해당하는 내용으로 아래의 내용을 참고해서 좀더 검색 하면 다른
부분에도 활용 가능 합니다.
(
(?=) 긍정형 전방탐색
(?!) 부정형 전방탐색
(?<=) 긍정형 후방탐색
(?<!) 부정형 후방탐색
)
5. 여권번호
ex> M12345678 -> M1234****
- M으로 시작하고(^인자를 넣으면 진짜 문장의 시작값 이어야 해서 처리 안함) 숫자로된 4자리와 이어진 숫자4자리의 문장의 경우 뒤의 숫자4자리를 ****으로 변경
tempStr = tempStr.replaceAll("(M[0-9]{4})([0-9]{4})", "$1****");
ex> TJ 0012345 T* 0012***
tempStr = "여권번호 TJ 0012345 입니다.";
- 영문2글자로 시작하고 가운데 공백 숫자7자리인 정보를 영문+영문 숫자4+숫자3 기준으로 나눠서 2,4마스킹
tempStr = tempStr.replaceAll("([A-Z])([A-Z])\\s([0-9]{4})([0-9]{3})", "$1* $3***");
6. 운전면허
ex> 서울12-123456-78 → 서울1*-1234**-*8
//한글2자리+숫자1자리+숫자1자리-숫자4자리+숫자2자리-숫자1자리+숫자1자리 에 맞는 정보를 치환 [0-9]는 너무 길어 지니까 \\d 로 사용
tempStr = tempStr.replaceAll("([가-힣]{2})(\\d{1})(\\d{1})-(\\d{4})(\\d{2})-(\\d{1})(\\d{1})", "$1$2*-$4**-*$7");
7. 카드번호
ex> 4000-1234-5678-0000 -> 40000-****-****-0000
tempStr.replaceAll("(\\d{4})-(\\d{4})-(\\d{4})-(\\d{4})", "$1-****-****-$4")
=> 4글자 기준 형식에 맞춰서 가운데 부분만 ****으로 변경 $1, $4의 경우 앞의 정규식 () 기준 문장의 순서를 의미 합니다. ()가 4개로 구성 되어 있어 $1, $2, $3, $4로 정의 할 수 있습니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n
마스킹 방식의 경우 단어를 쪼개서 조합하는 방식으로 처리 하게 되면서 비표준(javascript기준 지원 브라우저 확인 필요) 방식을 사용합니다. 마스킹 처리를 하지 않고 체크만 하는 경우에는 더 간단하게 패턴을 정의 할 수 있습니다.
이 부분은 추가 작업 예정 입니다.