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자 이상이 있을수 있으므로 조건을 분기해서 표현합니다.
※ 외국인 이름은 포함 안됩니다. 오로지 한국 이름만..
래퍼런스해서 본인의 방식으로 다시 구현해 보세요~