|
@ -0,0 +1,143 @@
|
|
|
package com.yihu.iot.util.conceal;
|
|
|
|
|
|
/**
|
|
|
* 数据脱敏工具
|
|
|
* Created by zdm on 2019/4/2.
|
|
|
*/
|
|
|
public class ConcealUtil {
|
|
|
private static final int SIZE = 6;
|
|
|
private static final String SYMBOL = "*";
|
|
|
|
|
|
/**
|
|
|
* 电话号码脱敏,达到保密效果
|
|
|
*
|
|
|
* @param userName 用户名
|
|
|
* @return 替换后的用户名
|
|
|
*/
|
|
|
public static String phoneConceal(String userName) {
|
|
|
String userNameAfterReplaced = "";
|
|
|
if (userName == null) {
|
|
|
userName = "";
|
|
|
}
|
|
|
int nameLength = userName.length();
|
|
|
if (nameLength <= 1) {
|
|
|
userNameAfterReplaced = "*";
|
|
|
} else if (nameLength == 2) {
|
|
|
userNameAfterReplaced = replaceAction(userName, "(?<=\\d{0})\\d(?=\\d{1})");
|
|
|
} else if (nameLength >= 3 && nameLength <= 6) {
|
|
|
userNameAfterReplaced = replaceAction(userName, "(?<=\\d{1})\\d(?=\\d{1})");
|
|
|
} else if (nameLength >= 7 && nameLength <= 10) {
|
|
|
userNameAfterReplaced = replaceAction(userName, "(?<=\\d{3})\\d(?=\\d{3})");
|
|
|
} else if (nameLength >= 11) {
|
|
|
userNameAfterReplaced = replaceAction(userName, "(?<=\\d{3})\\d(?=\\d{4})");
|
|
|
}
|
|
|
return userNameAfterReplaced;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 实际替换动作
|
|
|
*
|
|
|
* @param username username
|
|
|
* @param regular 正则
|
|
|
* @return
|
|
|
*/
|
|
|
private static String replaceAction(String username, String regular) {
|
|
|
return username.replaceAll(regular, "*");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 身份证号替换,保留前四位和后四位
|
|
|
* <p>
|
|
|
* 如果身份证号为空 或者 null ,返回null ;否则,返回替换后的字符串;
|
|
|
*
|
|
|
* @param idCard 身份证号
|
|
|
* @return
|
|
|
*/
|
|
|
public static String idCardConceal(String idCard) {
|
|
|
|
|
|
if (idCard.isEmpty() || idCard == null) {
|
|
|
return null;
|
|
|
} else {
|
|
|
return replaceAction(idCard, "(?<=\\d{6})\\d(?=\\d{4})");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 银行卡替换,保留后四位
|
|
|
* <p>
|
|
|
* 如果银行卡号为空 或者 null ,返回null ;否则,返回替换后的字符串;
|
|
|
*
|
|
|
* @param bankCard 银行卡号
|
|
|
* @return
|
|
|
*/
|
|
|
public static String bankCardConceal(String bankCard) {
|
|
|
|
|
|
if (bankCard.isEmpty() || bankCard == null) {
|
|
|
return null;
|
|
|
} else {
|
|
|
return replaceAction(bankCard, "(?<=\\d{0})\\d(?=\\d{4})");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 姓名及地址脱敏
|
|
|
* @param value
|
|
|
* @return
|
|
|
*/
|
|
|
public static String nameOrAddrConceal(String value) {
|
|
|
if (null == value || "".equals(value)) {
|
|
|
return value;
|
|
|
}
|
|
|
int len = value.length();
|
|
|
int pamaone = len / 2;
|
|
|
int pamatwo = pamaone - 1;
|
|
|
int pamathree = len % 2;
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
if (len <= 2) {
|
|
|
if (pamathree == 1) {
|
|
|
return SYMBOL;
|
|
|
}
|
|
|
stringBuilder.append(value.charAt(0));
|
|
|
stringBuilder.append(SYMBOL);
|
|
|
} else {
|
|
|
if (pamatwo <= 0) {
|
|
|
stringBuilder.append(value.substring(0, 1));
|
|
|
stringBuilder.append(SYMBOL);
|
|
|
stringBuilder.append(value.substring(len - 1, len));
|
|
|
|
|
|
} else if (pamatwo >= SIZE / 2 && SIZE + 1 != len) {
|
|
|
int pamafive = (len - SIZE) / 2;
|
|
|
stringBuilder.append(value.substring(0, pamafive));
|
|
|
for (int i = 0; i < SIZE; i++) {
|
|
|
stringBuilder.append(SYMBOL);
|
|
|
}
|
|
|
if ((pamathree == 0 && SIZE / 2 == 0) || (pamathree != 0 && SIZE % 2 != 0)) {
|
|
|
stringBuilder.append(value.substring(len - pamafive, len));
|
|
|
} else {
|
|
|
stringBuilder.append(value.substring(len - (pamafive + 1), len));
|
|
|
}
|
|
|
} else {
|
|
|
int pamafour = len - 2;
|
|
|
stringBuilder.append(value.substring(0, 1));
|
|
|
for (int i = 0; i < pamafour; i++) {
|
|
|
stringBuilder.append(SYMBOL);
|
|
|
}
|
|
|
stringBuilder.append(value.substring(len - 1, len));
|
|
|
}
|
|
|
}
|
|
|
return stringBuilder.toString();
|
|
|
}
|
|
|
|
|
|
/* public static void main(String[] args) throws IOException {
|
|
|
String strName= nameOrAddrConceal("张三");
|
|
|
System.out.println(strName);
|
|
|
String addr= nameOrAddrConceal("厦门市");
|
|
|
System.out.println(addr);
|
|
|
String idcard= idCardConceal("350825199012033283");
|
|
|
System.out.println(idcard);
|
|
|
String phone= phoneConceal("17689202624");
|
|
|
System.out.println(phone);
|
|
|
}*/
|
|
|
|
|
|
}
|