针对姓名、电话、地址、邮箱等敏感信息进行脱敏操作,代码如下:
1 import org.apache.commons.lang.StringUtils;
2
3 /**
4 * 数据脱敏工具类
5 * Created by shenruihai on 2018/06/13.
6 */
7 public class Desensitized {
8
9 /**
10 * 【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
11 *
12 * @param fullName
13 * @return
14 */
15 public static String chineseName(String fullName) {
16 if (StringUtils.isBlank(fullName)) {
17 return "";
18 }
19 String name = StringUtils.left(fullName, 1);
20 return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
21 }
22
23 /**
24 * 【身份证号】显示最后四位,其他隐藏。共计18位或者15位,比如:*************1234
25 *
26 * @param id
27 * @return
28 */
29 public static String idCardNum(String id) {
30 if (StringUtils.isBlank(id)) {
31 return "";
32 }
33 String num = StringUtils.right(id, 4);
34 return StringUtils.leftPad(num, StringUtils.length(id), "*");
35 }
36
37 /**
38 * 【固定电话】 显示后四位,其他隐藏,比如:*******3241
39 *
40 * @param num
41 * @return
42 */
43 public static String fixedPhone(String num) {
44 if (StringUtils.isBlank(num)) {
45 return "";
46 }
47 return StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*");
48 }
49
50 /**
51 * 【手机号码】前三位,后四位,其他隐藏,比如:135****6810
52 *
53 * @param num
54 * @return
55 */
56 public static String mobilePhone(String num) {
57 if (StringUtils.isBlank(num)) {
58 return "";
59 }
60 return StringUtils.left(num, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*"), "***"));
61 }
62
63 /**
64 * 【地址】只显示到地区,不显示详细地址,比如:上海徐汇区漕河泾开发区***
65 *
66 * @param address
67 * @param sensitiveSize 敏感信息长度
68 * @return
69 */
70 public static String address(String address, int sensitiveSize) {
71 if (StringUtils.isBlank(address)) {
72 return "";
73 }
74 int length = StringUtils.length(address);
75 return StringUtils.rightPad(StringUtils.left(address, length - sensitiveSize), length, "*");
76 }
77
78 /**
79 * 【电子邮箱】 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com
80 *
81 * @param email
82 * @return
83 */
84 public static String email(String email) {
85 if (StringUtils.isBlank(email)) {
86 return "";
87 }
88 int index = StringUtils.indexOf(email, "@");
89 if (index <= 1)
90 return email;
91 else
92 return StringUtils.rightPad(StringUtils.left(email, 1), index, "*").concat(StringUtils.mid(email, index, StringUtils.length(email)));
93 }
94
95 /**
96 * 【银行卡号】前六位,后四位,其他用星号隐藏每位1个星号,比如:6222600**********1234
97 *
98 * @param cardNum
99 * @return
100 */
101 public static String bankCard(String cardNum) {
102 if (StringUtils.isBlank(cardNum)) {
103 return "";
104 }
105 return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******"));
106 }
107
108 /**
109 * 【密码】密码的全部字符都用*代替,比如:******
110 *
111 * @param password
112 * @return
113 */
114 public static String password(String password) {
115 if (StringUtils.isBlank(password)) {
116 return "";
117 }
118 String pwd = StringUtils.left(password, 0);
119 return StringUtils.rightPad(pwd, StringUtils.length(password), "*");
120 }
121
122 }
来源:https://www.cnblogs.com/juihai/p/10330867.html