【开发笔记】- 数据脱敏

时光怂恿深爱的人放手 提交于 2019-11-29 07:04:24

针对姓名、电话、地址、邮箱等敏感信息进行脱敏操作,代码如下:

  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 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!