1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用MySQL或Java对查询结果中的手机号 身份证号等进行脱敏处理

使用MySQL或Java对查询结果中的手机号 身份证号等进行脱敏处理

时间:2020-01-28 00:16:51

相关推荐

使用MySQL或Java对查询结果中的手机号 身份证号等进行脱敏处理

为了保障客户数据的隐私,系统或者APP往往需要对手机号进行脱敏处理,因为前端仅仅是为了展示。

那什么是脱敏处理呢?就是把用户的一些敏感信息(如身份证号、邮箱、手机号等)进行加密(模糊处理)。

举例:假如手机号原本是18645461234,那么脱敏后的手机号则为:186****1234。

下面介绍实现脱敏的两种方式:

1、mysql方式:

sql:

-- 对手机号进行脱敏SELECTcommon_phone,INSERT ( common_phone, 4, 4, '****' ) FROMctm_customer_file LIMIT 1,10;

结果:

这里,主要是使用了INSERT函数,适用于任何字段的脱敏。

格式:INSERT(str,pos,len,newstr)

解释:

str:查询的列

pos:起始位置

len:从起始位置开始到被后面newstr替换的长度

newstr:需要被替换的字符串

2、java方式:

话不多说,直接上代码,这种工具类一般都是直接拿来用的。

import mons.lang.StringUtils;/*** 数据脱敏工具类**/public class BlurDataUtil {/*** 手机号脱敏处理* 脱敏规则: 保留前三后四, 比如 18738291234 置换为 187****1234* @param phone* @return*/public static final String blurPhone(String phone) {if (StringUtils.isEmpty(phone) || (phone.length() != 11)) {return phone;}return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");}/*** 身份证号脱敏处理* 原身份证号:50022210275699,脱敏后:132****99308084911* @param idCard* @return*/public static String blurIdCard(String idCard) {if (StringUtils.isEmpty(idCard)) {return "";}/** 参数1:证件号,参数2(OVERLAY):替换后的字符串,* 参数3(START):替换的起始下标,参数4(END):替换的结束下标(不包含)*/return StringUtils.overlay(idCard, "****", 3, 7);}/*** 身份证号脱敏处理* 展示 前6位和后6位* @param idCard* @return*/public static String hiddenIdCard(String idCard) {//身份证if (StringUtils.isBlank(idCard)) {return "";}return StringUtils.left(idCard, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(idCard, 4), StringUtils.length(idCard), "*"), "***"));}/*** 邮箱脱敏处理* 原邮箱:zhangsan@,脱敏后:zhang***@* @param email* @return*/public static String blurEmail(String email) {if (StringUtils.isEmpty(email)) {return email;}String encrypt = email.replaceAll("(\\w+)\\w{3}@(\\w+)", "$1***@$2");if(StringUtils.equalsIgnoreCase(email, encrypt)){encrypt = email.replaceAll("(\\w*)\\w{1}@(\\w+)", "$1*@$2");}return encrypt;}/*** 护照脱敏处理* 脱敏规则:护照前2后3位脱敏,护照一般为8或9位* @param passport* @return*/public static String blurPassport(String passport) {if (StringUtils.isEmpty(passport) || (passport.length() < 8)) {return passport;}return passport.substring(0, 2) + new String(new char[passport.length() - 5]).replace("\0", "*") + passport.substring(passport.length() - 3);}/*** 字段信息脱敏* 脱敏规则:如果字符长度大于3位,则隐藏最后三位,否则隐藏最后1位* @param field* @return*/public static String blurField(String field) {if (StringUtils.isEmpty(field)) {return field;}String encrypt = field.replaceAll("(\\w+)\\w{3}", "$1***");if(StringUtils.equalsIgnoreCase(field, encrypt)){encrypt = field.replaceAll("(\\w*)\\w{1}", "$1*");}return encrypt;}public static void main(String[] args) {System.out.println(blurPhone("18738291234")); // 187****1234System.out.println(blurIdCard("50022210275699")); // 500****99410275467System.out.println(blurEmail("zhangsan@")); // zhang***@System.out.println(blurPassport("12345678")); // 12***678System.out.println(blurField("I feel so good")); // I f*** so g***}/** 备注:* 1、String.replaceAll(第1个参数是脱敏筛选的正则,第2个参数是脱敏替换的正则)* 2、需要引入commons-lang3,这个基本每个项目都用到* <dependency>*<groupId>mons</groupId>*<artifactId>commons-lang3</artifactId>*<version>3.7</version>* </dependency>*/}

这里,主要说明一下StringUtils工具的overlay方法,适用于任何字段的脱敏。

格式:overlay(Stringstr,Stringoverlay,intstart,intend)

解释:

str:被替换的字符串

overlay:替换后的内容

int:替换的起始下标(0开始计数,包含)

end:替换的结尾下标(不包含)

扩展:

假如使用的是Mybatis框架,因为查询的时候会进行结果的映射(bean的属性的封装),可直接将脱敏的逻辑写在set或者get方法中:

set方法示例

public void setUserPhone(String userPhone){if (userPhone!=null) {//将手机号脱敏,参数1:手机号脱敏筛选正则,参数2:手机号脱敏替换正则this.userPhone = userPhone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1XXXX$2");}}

get方法示例

public String getApplicantPhone(){// return this.applicantPhone;if (this.applicantPhone!=null) {//将手机号脱敏,参数1:手机号脱敏筛选正则,参数2:手机号脱敏替换正则return this.applicantPhone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1XXXX$2");}else{return this.applicantPhone;}}

这样,查询出来的 list 就是自动脱敏好的啦

当然,数据量不大的情况下,还可以将查询出来的list进行for循环脱敏,如:

//List数据不为空时,对手机号进行脱敏if(pageInfoRestResponse.getData()!=null && CollectionUtils.isNotEmpty(pageInfoRestResponse.getData().getList())){List<EvaluateOrderDto> list = pageInfoRestResponse.getData().getList();list.forEach(item->{if (item.getApplicantPhone()!=null) {//将手机号脱敏,参数1:手机号脱敏筛选正则,参数2:手机号脱敏替换正则String newApplicantPhone = item.getApplicantPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1XXXX$2");item.setApplicantPhone(newApplicantPhone);}});}return pageInfoRestResponse;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。