From a3750dfb3b06b2524be72d2734fb8a7b5ecb5f1d Mon Sep 17 00:00:00 2001 From: ma <1062634917@qq.com> Date: Mon, 15 Nov 2021 16:39:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=B1=E6=95=8F=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ccsens/util/DesensitizedUtils.java | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 util/src/main/java/com/ccsens/util/DesensitizedUtils.java diff --git a/util/src/main/java/com/ccsens/util/DesensitizedUtils.java b/util/src/main/java/com/ccsens/util/DesensitizedUtils.java new file mode 100644 index 00000000..01999f93 --- /dev/null +++ b/util/src/main/java/com/ccsens/util/DesensitizedUtils.java @@ -0,0 +1,118 @@ +package com.ccsens.util; + +import org.apache.commons.lang3.StringUtils; +/** + * 数据脱敏工具类 + * + * @author ma + * @date 2017/10/25 + */ +public class DesensitizedUtils { + /** + * 【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李** + * + * @param fullName + * @return + */ + public static String chineseName(String fullName) { + if (StringUtils.isBlank(fullName)) { + return ""; + } + String name = StringUtils.left(fullName, 1); + return StringUtils.rightPad(name, StringUtils.length(fullName), "*"); + } + /** + * 【身份证号】显示最后四位,其他隐藏。共计18位或者15位,比如:*************1234 + * + * @param id + * @return + */ + public static String idCardNum(String id) { + if (StringUtils.isBlank(id)) { + return ""; + } + String num = StringUtils.right(id, 4); + return StringUtils.leftPad(num, StringUtils.length(id), "*"); + } + /** + * 【固定电话】 显示后四位,其他隐藏,比如:*******3241 + * + * @param num + * @return + */ + public static String fixedPhone(String num) { + if (StringUtils.isBlank(num)) { + return ""; + } + return StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*"); + } + /** + * 【手机号码】前三位,后四位,其他隐藏,比如:135****6810 + * + * @param num + * @return + */ + public static String mobilePhone(String num) { + if (StringUtils.isBlank(num)) { + return ""; + } + return StringUtils.left(num, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*"), "***")); + } + /** + * 【地址】只显示到地区,不显示详细地址,比如:上海徐汇区漕河泾开发区*** + * + * @param address + * @param sensitiveSize 敏感信息长度 + * @return + */ + public static String address(String address, int sensitiveSize) { + if (StringUtils.isBlank(address)) { + return ""; + } + int length = StringUtils.length(address); + return StringUtils.rightPad(StringUtils.left(address, length - sensitiveSize), length, "*"); + } + /** + * 【电子邮箱】 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com + * + * @param email + * @return + */ + public static String email(String email) { + if (StringUtils.isBlank(email)) { + return ""; + } + int index = StringUtils.indexOf(email, "@"); + if (index <= 1) { + return email; + } else { + return StringUtils.rightPad(StringUtils.left(email, 1), index, "*").concat(StringUtils.mid(email, index, StringUtils.length(email))); + } + } + /** + * 【银行卡号】前六位,后四位,其他用星号隐藏每位1个星号,比如:6222600**********1234 + * + * @param cardNum + * @return + */ + public static String bankCard(String cardNum) { + if (StringUtils.isBlank(cardNum)) { + return ""; + } + return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******")); + } + /** + * 【密码】密码的全部字符都用*代替,比如:****** + * + * @param password + * @return + */ + public static String password(String password) { + if (StringUtils.isBlank(password)) { + return ""; + } + String pwd = StringUtils.left(password, 0); + return StringUtils.rightPad(pwd, StringUtils.length(password), "*"); + } + +}