前言:
在我们的项目中,经常会遇到被要求对敏感数据进行脱敏的处理。比如用户的手机号,身份证信息,银行卡号信息,等等信息,不同权限的用户在前端画面看见的是不同的,低权限用户只能看到中间带****的信息。
常见脱敏方式
根据权限来进行脱敏,这个不用说了,很简单。这边主要讲几种常见的脱敏格式,手机,身份证等。
/**
* 全脱敏
*
* @param name
* @return
*/
public static String setAllSensitive(String name) {
if (StrUtil.isNotBlank(name)) {
name = Strings.repeat("*", name.length());
}
return name;
}
/**
* 姓名脱敏:3个字及以下显示1个字,3个字以上显示2个字
*
* @param name
* @return
*/
public static String tmName(String name) {
if (null == name || name.length() < 2) {
return name;
}
String tmName = "";
if (name.length() > 3) {
tmName = StringUtils.right(name, 2);
} else {
tmName = StringUtils.right(name, 1);
}
tmName = StringUtils.leftPad(tmName, StringUtils.length(name), "*");
return tmName;
}
/**
* 手机号码脱敏:显示前3后4
*
* @param phone
* @return
*/
public static String tmPhone(String phone) {
if (StringUtils.isEmpty(phone)) {
return phone;
}
if (phone.length() >= 11) {
return phone.replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2");
} else {
return phone.replaceAll("(\\d{2})\\d*(\\d{2})", "$1**$2");
}
}
/**
* 地址脱敏:12字及以下显示6个字,12字以上显示不超过50%
*
* @param address
* @return
*/
public static String tmAddress(String address) {
if (null == address || address.length() < 3) {
return address;
}
String tmAddress = "";
if (address.length() >= 12) {
tmAddress = StringUtils.left(address, 6);
} else {
tmAddress = StringUtils.left(address, address.length() / 2);
}
tmAddress = StringUtils.rightPad(tmAddress, StringUtils.length(address), "*");
return tmAddress;
}
/**
* 身份证脱敏:显示后4位
*
* @param cardId
* @return
*/
public static String tmCardCode(String cardId) {
if (null == cardId || cardId.length() < 4) {
return cardId;
} else {
//显示后4位
String sfzRight = StringUtils.right(cardId, 4);
sfzRight = StringUtils.leftPad(sfzRight, StringUtils.length(cardId), "*");
return sfzRight;
}
}
/**
* 编号脱敏:隐藏百分之50
*
* @param code
* @return
*/
public static String tmCode(String code) {
if (null == code) {
return code;
}
String tmCode = StringUtils.left(code, code.length() / 2);
tmCode = StringUtils.rightPad(tmCode, StringUtils.length(code), "*");
return tmCode;
}