IT•개발 끄적/Java

[java] 휴대폰 번호, 계좌번호, 이름 마스킹(masking)

소다맛사탕 2021. 4. 6. 22:26
반응형

안녕하세요. 소다맛사탕 입니다.

(2021/12/28 코드 수정)

휴대폰번호, 계좌번호, 또는 이름은 인터넷에서 중요한 개인정보 인데요.

웹을 구현할때 이 개인정보를 마스킹해야 보안 위협에서 벗어날 수 있습니다.

 

그래서 휴대폰 번호, 계좌번호, 이름에 대한 마스킹 처리 방법을 간단하게 적어봤습니다.

 

 

1. 휴대폰 번호 마스킹(phone number masking)

// 번호 설정
String phoneNum = "01012341234";

// 마스킹할 번호가 존재해야 하므로
if(phoneNum != null && !"".equals(phoneNum)){
	phoneNum = phoneNum.substring(0,3) + "****" 
    		+ phoneNum.substring(phoneNum.length()-4, phoneNum.length());
}

System.out.println("휴대폰 번호 마스킹 : " + phoneNum);

>> 휴대폰 번호 마스킹 : 010****1234

번호를 하드코딩 했지만, DB나 파라미터로 들어올 경우 null 이나 공백이 존재할 수 있기에 조건문을 써준다.

앞자리 010, 뒷번호를 제외한 가운데 번호를 마스킹(*).

 

2. 계좌번호 마스킹(account number masking)

// 계좌번호 설정(은행마다 자릿수 틀림. 11 ~ 13자리 사이)
// 예시는 13자리
String accountNum = "0001111123456";

// 계좌번호 앞 3자리, 맨 뒤 3자리를 빼고 마스킹
if(accountNum != null && !"".equals(accountNum)){
	// 계좌번호 가운데 글자 마스킹 변수 선언
    String middleMask = accountNum.substring(3, accountNum.length()-3);
    // 마스킹 변수 선언(*)
    String masking = "";
    
    // 앞 3자리, 맨뒤 3자리를 빼고 모두 마스킹 하기위한 증감값
    for(int i = 0; i < middleMask.length(); i++){
    	masking += "*";
    }
    
    accountNum = accountNum.substring(0,3)
    	+ accountNum.replace(middleMask, masking)
        + accountNum.substring(accountNum.length()-3, accountNum.length());
}

System.out.println("계좌번호 마스킹 : " + accountNum);

>> 계좌번호 마스킹 : 000*******456

휴대폰 번호와 마찬가지로 DB나 파라미터를 통해서 값이 들어올 경우를 대비해 조건문을 썼다.

계좌번호의 앞 3자리, 맨 뒤 3자리를 제외한 모든 부분을 마스킹(*)

 

3. 이름 마스킹(name masking)

// 이름 설정
String name = "가나다";

// null 또는 빈값 체크
if(name != null && !"".equals(name)){
	// 이름 가운데 글자 마스킹
    String middleMask = "";
    // 이름이 외자 또는 4자 이상인 경우 분기
    if(name.length() > 2){
    	middleMask = name.substring(1, name.length()-1);
    } else {
    	middleMask = name.substring(1, name.length());
    }
    // 마스킹 변수 선언(*)
    String masking = "";
    // 가운데 글자 마스킹 하기위한 증감값
    for(int i = 0; i < middleMask.length(); i++){
    	masking += "*";
    }
    
    // 선언 방식(20211208 수정)
    // 1. 각각 분기
    // 이름이 외자 또는 4자 이상인 경우 분기
    if(name.length() > 2){
    	name = name.substring(0,1)
        	+ middleMask.replace(middleMask, masking)
            + name.substring(name.length()-1, name.length());
    } else {
    	name = name.substring(0,1)
        	+ middleMask.replace(middleMask, masking);
    }
    // 2. 분기, 코드 낭비 없이. 변수만 재선언
    /*name = name.replace(middleMask, masking);*/
}

System.out.println("이름 마스킹 : " + name);

>> 이름 마스킹 : 가*다

마찬가지로 DB나 파라미터로 값이 들어올 경우를 대비한 조건문을 포함합니다.

이름의 경우 외자나 4자 이상이 있을수 있으므로 조건을 분기해서 표현합니다.

 

※ 외국인 이름은 포함 안됩니다. 오로지 한국 이름만..

 

래퍼런스해서 본인의 방식으로 다시 구현해 보세요~