public static void main(String[] args) {
String logType = "这是一段数字111111111111111111,后面是身份证号222211111111111111,333311111111111111";
if(logType.contains("身份证号")){
String delimiter = "身份证号";
List<String> idCardNumList = getIdCardNumAfterDelimiter(logType, delimiter);
if (CollectionUtil.isNotEmpty(idCardNumList)) {
for (String idCard : idCardNumList) {
String encryptedIdCardNum = encryptIDCardNum(idCard);
logType = replaceIdCardNum(logType, idCard, encryptedIdCardNum);
System.out.println(logType);
}
} else {
System.out.println("无法找到身份证号");
}
}
}
private static List<String> getIdCardNumAfterDelimiter(String inputStr, String delimiter) {
int index = inputStr.indexOf(delimiter);
String substring = inputStr.substring(index);
String pattern = "\\d{17}[\\d|x|X]";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(substring);
List<String> list = new ArrayList<>();
while (m.find()) {
String idCardNum = m.group();
list.add(idCardNum);
}
if (CollectionUtil.isNotEmpty(list)){
return list;
}
return null;
}
private static String encryptIDCardNum(String idCardNum) {
StringBuilder sb = new StringBuilder();
sb.append(idCardNum, 0, 4);
for (int i = 4; i < idCardNum.length()-4; i++) {
sb.append("*");
}
sb.append(idCardNum.substring(idCardNum.length()-4));
return sb.toString();
}
private static String replaceIdCardNum(String inputStr, String oldIdCardNum, String newIdCardNum) {
return inputStr.replace(oldIdCardNum, newIdCardNum);
}
执行结果
这是一段数字111111111111111111,后面是身份证号2222**********1111,333311111111111111
这是一段数字111111111111111111,后面是身份证号2222**********1111,3333**********1111