最近开发,需要对一些敏感信息进行脱敏处理,就整理一个简单的工具类
代码如下:
public class DataMaskUtil {
private final static String REPLACE_CHAR = "*";
/**
* 脱敏
*
* @param str 需脱敏的字符串
* @param left 左边需保留的位数
* @param right 右边需保留的位数
* @return
*/
public static String around(String str, int left, int right) {
if (str == null) {
return "";
}
String regex = String.format("(?<=.{%d}).(?=.{%d})", left, right);
return str.replaceAll(regex, REPLACE_CHAR);
}
//姓名
public static String nameMask(String name) {
int length = name.length();
String result = name;
if (length == 2) {
// 两位姓名,展示第二位
result = around(name, 0, 1);
} else if (length > 2) {
// 三位及以上姓名,显示第一个字和最后一个字
result = around(name, 1, 1);
}
return result;
}
//手机号
public static String phoneMask(String phoneNum) {
int length = phoneNum.length();
//长度11位,展示前3后3
if (length == 11) {
return around(phoneNum, 3, 3);
}
//12位,展示前4后3
return around(phoneNum, 4, 3);
}
//证件号
public static String idNoMask(String idNo) {
int length = idNo.length();
String result = idNo;
if (length == 15) {
//长度15位,7-12位且最后一位屏蔽
result = around(around(idNo, 6, length - 12), length - 1, 0);
} else if (length == 18) {
//18位,7-14位且最后两位屏蔽
result = around(around(idNo, 6, length - 14), length - 2, 0);
} else if (length > 2) {
// 除身份证外其他证件类型只展示第一位和最后一位
result = around(idNo, 1, 1);
}
return result;
}
//银行卡号
public static String cardNoMask(String cardNo) {
int length = cardNo.length();
return around(cardNo, 0, 4);
}
}
希望对你有所帮助。