为了保障客户数据的隐私,系统或者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 org.apache.commons.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");}/*** 身份证号脱敏处理* 原身份证号:500222202110275699,脱敏后: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@qq.com,脱敏后:zhang***@qq.com* @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("500222202110275699"));  // 500****99410275467System.out.println(blurEmail("zhangsan@qq.com"));  // zhang***@qq.comSystem.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>org.apache.commons</groupId>*     <artifactId>commons-lang3</artifactId>*     <version>3.7</version>* </dependency>*/
}

这里,主要说明一下StringUtils工具的overlay方法,适用于任何字段的脱敏。
格式:overlay(String str,String overlay,int start,int end)
解释:
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;

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

  1. Java对姓名, 手机号, 身份证号, 地址进行脱敏

    替换几位就用几个*号 一.姓名 1, 脱敏规则: 只显示第一个汉字,比如李某某置换为李**, 李某置换为李* private static String desensitizedName(String ...

  2. Excel中如何用身份证号提取计算年龄?

    Excel中如何用身份证号提取计算年龄? 目录 Excel中如何用身份证号提取计算年龄? 1.在年龄D2单元格中输入公式[=DATEDIF(TEXT(MID(C2,7,8),"00-00-0 ...

  3. java hql查询_Spring 中常用的hql查询方法(getHibernateTemplate())(转)

    示例:this.getHibernateTemplate().find("from bean.User"); 返回所有User对象 二.find(String queryStrin ...

  4. js中如何通过身份证号计算出生日期和年龄

    在html中有如下标签 身份证号:<input type="text" id="Gra_IDCard" onChange="IDCardChan ...

  5. java数据脱敏处理,手机号,身份证号和银行卡号打码展示

    目录 方式1:substring分割 方式2:正则匹配验证 方式3:StringUtils.overlay 1 先引入commons-lang3,这个基本每个项目都用到 2 数据处理 3 测试结果 方 ...

  6. mysql和java时间戳查询

    Mysql中时间戳处理 时间戳转为指定日期格式 SELECT date_format(from_unixtime("1652399864"),"%Y-%m") ...

  7. mysql与java连接查询_【java】MySQL数据库之连接查询

    连接查询 首先来认识一个叫笛卡尔积 (cartesian product) 的东东,也可以叫直积. 假设我们有一个集合 A = {a, b}, 还有一个集合B = {0, 1, 2} ,那么这两个两集 ...

  8. mysql sql len_MySQL的查询计划中ken_len的值计算方法

    key_len的含义 在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示: mysql> create table t(a int primary key, b int n ...

  9. mysql select null 0,查询值中为NULL,在MySQL中产生0.00

    我有一个动态编写的查询(通过Joomla的OO PHP)将一些值插入MySQL数据库.用户填写的表单上有一个字段用于金额,如果它们留空,我希望进入系统的值为NULL.我已经将错误日志中的查询写出来了; ...

最新文章

  1. MPEG简介 + 如何计算CBR 和VBR的MP3的播放时间
  2. 找回MySQL的root密码
  3. 优盘中发现计算机病毒怎么办,【网警课堂】教你解决U盘使用中出现的各种问题!...
  4. Keepalived的LVS配置
  5. html 消息通知声音,ajax实现web页面的消息实时提醒时播放提示音
  6. 交换二叉树的每个节点的左右子树
  7. 一文读懂什么是DDS
  8. 【IDEA】IDEA 下一些 编码技巧
  9. linux下录屏与截屏软件kazam
  10. hadoop 2.6 伪分布式的安装
  11. [环境搭建]Windows下安装Ruby和Jekyll
  12. 使用Gps获取经纬度
  13. 软件开发项目计划书编写说明
  14. 计算机毕业设计php的仓库管理系统(源码+系统+mysql数据库+Lw文档)
  15. ubuntu查看opencv的版本
  16. 记一次nginx配置服务器代理发送请求(外网请求内网ip)
  17. seleniumwire获取百度指数
  18. Java餐厅点餐系统uniapp源码带安装教程
  19. 又有12款APP违规收集用户信息,下架整改
  20. 什么是电压跟随器,它有哪些特点,应用于哪些场合?

热门文章

  1. 均衡发展计算机室一机一册,义务均衡发展功能室管理指导意见
  2. 50个免费和高质量的图标集
  3. 二、肿瘤发展进程、全基因组突变发生顺序(The evolutionary history of 2,658 cancers)
  4. 流浪地球2可以投资的出品方是哪家?
  5. /usr/local/ruby/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such
  6. 浅谈----接口测试用例
  7. AL计算机课程,USTC计算机体系结构课程主页
  8. 【IoT】如何快速了解一个行业?如何做市场洞察?
  9. js--《js缓存的三种方法及区别与特点》
  10. 查单词神器:欧路词典