针对姓名、电话、地址、邮箱等敏感信息进行脱敏操作,代码如下:
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