|
@ -15,6 +15,8 @@ import java.lang.reflect.Field; |
|
|
import java.util.Arrays; |
|
|
import java.util.Arrays; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
import java.util.Map; |
|
|
import java.util.Map; |
|
|
|
|
|
import java.util.regex.Matcher; |
|
|
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* desc:脱敏处理器 |
|
|
* desc:脱敏处理器 |
|
@ -137,7 +139,10 @@ public class MaskProcessor { |
|
|
return maskMobile(originString); |
|
|
return maskMobile(originString); |
|
|
} else if (MaskResponse.MASK_TYPE_CHINESE_NAME.equals(maskType)) { |
|
|
} else if (MaskResponse.MASK_TYPE_CHINESE_NAME.equals(maskType)) { |
|
|
return maskChineseName(originString); |
|
|
return maskChineseName(originString); |
|
|
} else { |
|
|
}else if (MaskResponse.MASK_TYPE_YANTAI_PEOPLE_NAME.equals(maskType)) { |
|
|
|
|
|
return maskYantaiPeopleName(originString); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
return originString; |
|
|
return originString; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -166,6 +171,57 @@ public class MaskProcessor { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 对烟台姓名进行判断 |
|
|
|
|
|
* @param originString |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private String maskYantaiPeopleName(String originString) { |
|
|
|
|
|
if (StringUtils.isBlank(originString) || originString.length() == 1) { |
|
|
|
|
|
// 空串,或者只有一个字的,不打码,直接返回
|
|
|
|
|
|
return originString; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String regex = "^[\\u4e00-\\u9fa5]+$"; // 正则表达式匹配中文字符
|
|
|
|
|
|
Pattern pattern = Pattern.compile(regex); |
|
|
|
|
|
Matcher matcher = pattern.matcher(originString); |
|
|
|
|
|
// 中文名字
|
|
|
|
|
|
if (matcher.matches()) { |
|
|
|
|
|
|
|
|
|
|
|
char lastChar = originString.charAt(originString.length() - 1); |
|
|
|
|
|
StringBuilder maskedName = new StringBuilder(); |
|
|
|
|
|
for (int i = 0; i < originString.length() - 1; i++) { |
|
|
|
|
|
maskedName.append('*'); |
|
|
|
|
|
} |
|
|
|
|
|
maskedName.append(lastChar); |
|
|
|
|
|
return maskedName.toString(); |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
// 英文名字
|
|
|
|
|
|
if (originString != null && originString.length() > 2) { |
|
|
|
|
|
StringBuilder maskedName = new StringBuilder(); |
|
|
|
|
|
boolean foundSecondUppercase = false; |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < originString.length(); i++) { |
|
|
|
|
|
char currentChar = originString.charAt(i); |
|
|
|
|
|
|
|
|
|
|
|
if (Character.isUpperCase(currentChar)) { |
|
|
|
|
|
if (!foundSecondUppercase) { |
|
|
|
|
|
foundSecondUppercase = true; |
|
|
|
|
|
} else { |
|
|
|
|
|
// 替换第二个大写字母前的字符为"*"
|
|
|
|
|
|
maskedName.append('*'); |
|
|
|
|
|
break; // 替换后,跳出循环
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
maskedName.append(currentChar); |
|
|
|
|
|
} |
|
|
|
|
|
return maskedName.toString(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return originString; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 唯一整件号打码,可能是身份证号或者是护照号 |
|
|
* 唯一整件号打码,可能是身份证号或者是护照号 |
|
|
* 将明文字符串打码变为掩码。保留前6,后面打码 |
|
|
* 将明文字符串打码变为掩码。保留前6,后面打码 |
|
|