功能目录
- 隐藏start下标后面的所有内容
- 隐藏从start至end下标的内容
- 姓名脱敏
- 手机号码脱敏
- 身份证号脱敏
- 地址脱敏
代码实现
import org.springframework.util.Assert;
import java.util.Arrays;
/**
* 脱敏工具类
*/
public class DesensitizedUtil {
/**
* 隐藏下标为start后面的内容
* @param orig 原文
* @param start 开始隐藏的下标
* @return
*/
public static String hide(CharSequence orig,int start){
int end = orig.length();
return hide(orig,start,end);
}
/**
* 隐藏从start至end下标的内容
* @param orig
* @param start
* @param end
* @return
*/
public static String hide(CharSequence orig,int start,int end){
int len = orig.length();
StringBuilder sb = new StringBuilder(orig);
char[] stars = new char[end-start];
Arrays.fill(stars,'*');
sb.replace(start,end,String.valueOf(stars));
return sb.toString();
}
/**
* 姓名脱敏
* @param orig 真实姓名
* @return 脱敏后姓名
*/
public static String name(CharSequence orig){
int len = orig.length();
if(len==2)return hide(orig,1);
return hide(orig,1,len-1);
}
/**
* 手机号码脱敏
* @param orig 真实手机号码
* @return 脱敏后手机号码
*/
public static String mobilePhone(CharSequence orig){
int len = orig.length();
Assert.isTrue(len==11,"手机号码长度应为11位");
return hide(orig,3,7);
}
/**
* 身份证号脱敏
* @param orig 真实身份证号
* @return 脱敏后身份证号
*/
public static String idCardNum(CharSequence orig){
int len = orig.length();
Assert.isTrue(len==18,"身份证号长度应为18位");
return hide(orig,6,14);
}
/**
* 地址脱敏
* @param orig 真实地址
* @return 脱敏后地址
*/
public static String address(CharSequence orig){
int len = orig.length();
if(len<12)return hide(orig,len/2);
return hide(orig,6);
}
public static void main(String[] args) {
System.out.println(idCardNum("892131200802047585"));
System.out.println(address("广东省深圳市龙岗区坂田街道长发中路99号101"));
System.out.println(mobilePhone("13800138000"));
System.out.println(name("李四"));
System.out.println(name("王老五"));
System.out.println(name("泰达米尔"));
}
}