1.先看结果
// 身份证号码测试
encrypt("111135199710112512", 6, 4);//该身份证号码为测试,并不实际存在
// 结果:
111135********2512
// 电话号码测试
encrypt("1006348888", 3, 2);//该电话号码为测试,并不实际存在
// 结果:
100******88
2.方法实现
/**
* 用户身份证号码的打码隐藏加星号加* 18位和非18位身份证处理均可处理
*
* @param idCard 身份证号
* @param front 需要显示前几位
* @param end 需要显示末几位
* @return 处理完成之后的结果
*/
public static String encrypt(String idCard, int front, int end) {
if (StringUtils.isEmpty(idCard)) return idCard;
if ((front + end) > idCard.length()) return idCard;
if (front < 0 || end < 0) return idCard;
//计算 ‘*’ 号数量
int asteriskCount = idCard.length() - (front + end);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < asteriskCount; i++) {
stringBuilder.append("*");
}
String regex = "(\\w{" + String.valueOf(front) + "})(\\w+)(\\w{" + String.valueOf(end) + "})";
return idCard.replaceAll(regex, "$1" + stringBuilder + "$3");
}
其实从方法实现来看,不止身份证号码、电话号码,只要是一串数字都可以使用该方法。