/**
* 对字符串进行脱敏操作
* @param str原始字符串
* @param prefix 左侧需要保留几位明文字段
* @param suffix 右侧需要保留几位明文字段
* @param maskStr 用于遮罩的字符串, 如'*'
* @return 脱敏后结果
*/
public static String desensitized(String str, int prefix, int suffix, String maskStr) {
if (StrUtil.isNotEmpty(str)) {
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0, n = str.length(); i < n; i++) {
if (i < prefix) {
sb.append(str.charAt(i));
continue;
}
if (i > (n - suffix - 1)) {
sb.append(str.charAt(i));
continue;
}
sb.append(maskStr);
}
return sb.toString();
}
例如:
/**
* 【中文姓名】只显示最后一个汉字,其他隐藏为星号,比如:**梦
* @param fullName 姓名
* @return 结果
*/
public static String chineseName(String str) {
if (str== null) {
return null;
}
return desensitized(str, 0, 1, "*");
}
/**
* 【身份证号】显示前六位, 四位,其他隐藏。共计18位或者15位,比如:340304*******1234
* @param id 身份证号码
* @return 结果
*/
public static String idCardNum(String str) {
return desensitized(str, 6, 4, "*");
}
/**
* 【手机号码】前三位,后四位,其他隐藏,比如135****6810
* @param num 手机号码
* @return 结果
*/
public static String mobilePhone(String str) {
return desensitized(str, 3, 4, "*");
}