1.背景
在编码中,我们经常会对手机号,身份证号等数据进行脱敏处理,保护用户隐私,提高系统安全性。这边文章提供了xx*****xx格式的脱敏处理代码,希望对各位有所帮助。
2. 实现
1.定义接口,方便使用其它方式扩展
/**
* 脱敏接口定义
*
* @author lieber
*/
public interface IDesensitization {
String REPLACE_CHAR = "*";
/**
* 脱敏
*
* @param str 待脱敏字符串
* @param left 左边保留多少位
* @param right 右边保留多少位
* @return 脱敏结果,除左右外,其余字符将被替换为*
*/
String around(String str, int left, int right);
/**
* 身份证号脱敏
*
* @param cardNum 身份证号码
* @return 脱敏后身份证号码,形如510**********1232
*/
String idCard(String cardNum);
/**
* 电话号码脱敏
*
* @param phone 电话号码
* @return 脱敏后电话号码,形如152****1232
*/
String phone(String phone);
}
2.默认提供一种实现
使用正则表达式,保留左右长度,替换中间为*
import com.yugioh.core.util.words.desensitization.IDesensitization;
/**
* 默认脱敏实现
*
* @author lieber
*/
public class DefaultDesensitizationImpl implements IDesensitization {
@Override
public String around(String str, int left, int right) {
if (str == null || (str.length() < left + right + 1)) {
return str;
}
String regex = String.format("(?<=\\w{%d})\\w(?=\\w{%d})", left, right);
return str.replaceAll(regex, REPLACE_CHAR);
}
@Override
public String idCard(String cardNum) {
return this.around(cardNum, 3, 4);
}
@Override
public String phone(String phone) {
return this.around(phone, 3, 4);
}
}
3.使用
3.1静态工具类
/**
* 文字脱敏工具类
*
* @author lieber
*/
public class WordsDesensitizationUtil {
private static IDesensitization desensitization = new DefaultDesensitizationImpl();
/**
* 脱敏
*
* @param str 待脱敏字符串
* @param left 左边保留多少位
* @param right 右边保留多少位
* @return 脱敏结果,除左右外,其余字符将被替换为*
*/
public static String around(String str, int left, int right) {
return desensitization.around(str, left, right);
}
/**
* 身份证号脱敏
*
* @param cardNum 身份证号码
* @return 脱敏后身份证号码,形如510**********1232
*/
public static String idCard(String cardNum) {
return desensitization.idCard(cardNum);
}
/**
* 电话号码脱敏
*
* @param phone 电话号码
* @return 脱敏后电话号码,形如152****1232
*/
public static String phone(String phone) {
return desensitization.phone(phone);
}
}
3.1交给Spring管理
@Bean
public IDesensitization desensitization() {
return new DefaultDesensitizationImpl();
}
网友评论