|
|
|
@ -0,0 +1,155 @@
|
|
|
|
|
package com.xjs.utils;
|
|
|
|
|
|
|
|
|
|
import com.ruoyi.common.core.utils.StringUtils;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 脱敏工具类
|
|
|
|
|
* @author xiejs
|
|
|
|
|
* @since 2022-06-21
|
|
|
|
|
*/
|
|
|
|
|
public class DesensitizedUtils {
|
|
|
|
|
/**
|
|
|
|
|
* 【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
|
|
|
|
|
*
|
|
|
|
|
* @param fullName
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String chineseName(String fullName) {
|
|
|
|
|
if (StringUtils.isBlank(fullName)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
String name = StringUtils.left(fullName, 1);
|
|
|
|
|
return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【身份证号】前三位 和后三位
|
|
|
|
|
*
|
|
|
|
|
* @param front
|
|
|
|
|
* @param end
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String idCardNum(String idCardNum, int front, int end) {
|
|
|
|
|
//身份证不能为空
|
|
|
|
|
if (StringUtils.isEmpty(idCardNum)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
//需要截取的长度不能大于身份证号长度
|
|
|
|
|
if ((front + end) > idCardNum.length()) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
//需要截取的不能小于0
|
|
|
|
|
if (front < 0 || end < 0) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
//计算*的数量
|
|
|
|
|
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");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【固定电话 前四位,后两位
|
|
|
|
|
*
|
|
|
|
|
* @param num
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String fixedPhone(String num) {
|
|
|
|
|
if (StringUtils.isBlank(num)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
return StringUtils.left(num, 4).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 2), StringUtils.length(num), "*"), "****"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【手机号码】前三位,后两位,其他隐藏,比如135******10
|
|
|
|
|
*
|
|
|
|
|
* @param num
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String mobilePhone(String num) {
|
|
|
|
|
if (StringUtils.isBlank(num)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
return StringUtils.left(num, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 2), StringUtils.length(num), "*"), "***"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****
|
|
|
|
|
*
|
|
|
|
|
* @param address
|
|
|
|
|
* @param sensitiveSize 敏感信息长度
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String address(String address, int sensitiveSize) {
|
|
|
|
|
if (StringUtils.isBlank(address)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
int length = StringUtils.length(address);
|
|
|
|
|
return StringUtils.rightPad(StringUtils.left(address, length - sensitiveSize), length, "*");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【电子邮箱 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com>
|
|
|
|
|
*
|
|
|
|
|
* @param email
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String email(String email) {
|
|
|
|
|
if (StringUtils.isBlank(email)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
int index = StringUtils.indexOf(email, "@");
|
|
|
|
|
if (index <= 1) {
|
|
|
|
|
return email;
|
|
|
|
|
} else {
|
|
|
|
|
return StringUtils.rightPad(StringUtils.left(email, 1), index, "*").concat(StringUtils.mid(email, index, StringUtils.length(email)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 【银行卡号】前六位,后四位,其他用星号隐藏每位1个星号,比如:6222600**********1234>
|
|
|
|
|
*
|
|
|
|
|
* @param cardNum
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String bankCard(String cardNum) {
|
|
|
|
|
if (StringUtils.isBlank(cardNum)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【密码】密码的全部字符都用*代替,比如:******
|
|
|
|
|
*
|
|
|
|
|
* @param password
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String password(String password) {
|
|
|
|
|
if (StringUtils.isBlank(password)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
String pwd = StringUtils.left(password, 0);
|
|
|
|
|
return StringUtils.rightPad(pwd, StringUtils.length(password), "*");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【车牌号】前两位后一位,比如:苏M****5
|
|
|
|
|
*
|
|
|
|
|
* @param carNumber
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String carNumber(String carNumber) {
|
|
|
|
|
if (StringUtils.isBlank(carNumber)) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
return StringUtils.left(carNumber, 2).
|
|
|
|
|
concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(carNumber, 1), StringUtils.length(carNumber), "*"), "**"));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|