最简单的使用正则替换来实现隐藏身份证中间几位数
public static void main(String[] args) {
//隐藏身份证
String idCard = "51343619940809631X";
String resultIdCard = idCard.replaceAll("(\\d{4})\\d{11}(\\w{3})","$1**********$2");
System.out.println("隐藏后的身份证号:" + resultIdCard);
//隐藏后的身份证号:5134**********31X
//隐藏手机号码中间四位
String phoneNumber = "17611158259";
String resultPhone= phoneNumber.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
System.out.println("隐藏后的手机号:" + resultPhone);
//隐藏后的手机号:176****8259
}
再提供一个通用的方法来实现,该方法可任意截取隐藏任意内容,并可设置要隐藏的前后位数
public static void main(String[] args) {
String idCard = idMask("51343619940809631X",4,3);
System.out.println(idCard);
}
/**
* 如用户身份证号码的打码隐藏加星号加*
* 参数异常直接返回null
*
* @param idCardNum 需要隐藏的字符串
* @param front 需要显示前几位
* @param end 需要显示末几位
* @return 处理完成的身份证
*/
public static String idMask(String idCardNum, int front, int end) {
//身份证不能为空
if (StringUtils.isBlank(idCardNum)) {
return null;
}
//需要截取的长度不能大于身份证号长度
if ((front + end) > idCardNum.length()) {
return null;
}
//需要截取的不能小于0
if (front < 0 || end < 0) {
return null;
}
//计算*的数量
int asteriskCount = idCardNum.length() - (front + end);
StringBuffer asteriskStr = new StringBuffer();
for (int i = 0; i < asteriskCount; i++) {
asteriskStr.append("*");
}
String regex = "(\\w{" + String.valueOf(front) + "})(\\w+)(\\w{" + String.valueOf(end) + "})";
return idCardNum.replaceAll(regex, "$1" + asteriskStr + "$3");
}