java中 将身份证,手机号指定的日期变成*,打码,保护隐私,然后输出

1,/**   https://zhidao.baidu.com/question/1051773704105278139.html
* 设置一个静态的公共方法方便以后调用
* @param id
* @return
*/
public static String idFormat(String id){
// 可以用 StringBuilder 这个类,里面有一个接口replace,如下
StringBuilder sb = new StringBuilder(id);
sb.replace(6, 10, "****");
return sb.toString();
}
public static void main(String[] args) {
System.out.println(Test.idFormat("10013319961213602X"));
}
以上代码就能实现,纯手打,望采纳。(main方法的Test是我这个测试类,你到时候把上面代码复制到你的Program2类里面,到时候项目调用直接String str =Program2.idFormat(身份证号) 这个str就是处理好的身份证号)

 

2,public class Program2 {
public static void main(String[] args) {
String id ="10013319961213602X";
StringBuilder sb = new StringBuilder(id);
sb.replace(6, 10, "****");
System.out.println(sb.toString());
}
}

 

3,https://blog.csdn.net/lmw21848/article/details/50683650

使用正则表达式为手机号码或身份证号码打星号

首先正则表达式的匹配方式是凡是符合的字符都获得,所以对于手机号

(?<=[\d]{3})\d(?=[\d]{4})

这样一个表达式就可以只保留前三位和后四位

但是!这个表达式在百度搜索出的所有正则表达式在线测验中都是不能通过的,不知道为什么所有(?<=)这个表达式都是不支持的,晕。

大体讲解一下这个表达式的含义

[\d]{3}的意思是 三个数字
(?<=)的意思是 前面匹配但不保留,比如ILOVEYOULOVEME,(?<=I).{5}的结果只有LOVEY而没有LOVEM,也没有I
所以目前连起来的条件可以表达为 要求的数字必须满足前面有三个数字

(?=)的意思跟(?<=)恰好相反 后面匹配但不保留,比如ILOVEYOULOVEME,.{5}(?=ME)的结果只有ULOVE,没有ME
最后条件连起来就是 要求的数字必须满足前面有三个数字,且后面有4个数字。

假设手机号码为12345678910,则满足这一条件的数字为4和5和6和7。之所以用和,是想提醒最后的得到的数字不是4567而是分开的,代码中替代时只要替代一个“*”就好,因为会替代4次。

Java代码
String s = "15678901234";
s = s.replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*"); //这里*只要一个,因为会替代多次,每次一个。
System.out.println(s);
1
2
3
结果就是

156****1234
--------------------- 
作者:土逗甜菜 
来源:CSDN 
原文:https://blog.csdn.net/lmw21848/article/details/50683650 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

4,

/**
     * 用户身份证号码的打码隐藏加星号加*
     * <p>18位和非18位身份证处理均可成功处理</p>
     * <p>参数异常直接返回null</p>
     *
     * @param idCardNum 身份证号码
     * @param front     需要显示前几位
     * @param end       需要显示末几位
     * @return 处理完成的身份证
     */
    public static String idMask(String idCardNum, int front, int end) {
        //身份证不能为空
        if (TextUtils.isEmpty(idCardNum)) {
            return null;
        }
        //需要截取的长度不能大于身份证号长度
        if ((front + end) > idCardNum.length()) {
            return null;
        }
        //需要截取的不能小于0
        if (front < 0 || end < 0) {
            return null;
        }
        //计算*的数量
        int asteriskCount = idCardNum.length() - (front + end);
        StringBuffer asteriskStr = new StringBuffer();
        for (int i = 0; i < asteriskCount; i++) {
            asteriskStr.append("*");
        }
        String regex = "(\\w{" + String.valueOf(front) + "})(\\w+)(\\w{" + String.valueOf(end) + "})";
        return idCardNum.replaceAll(regex, "$1" + asteriskStr + "$3");
    }

测试用例:

idMask("310181198002280637", 6, 4);
310181********0637
idMask("31018119800228", 6, 4);
310181****0228
idMask("310181198002280637", 0, 4);
**************0637
idMask("310181198002280637", 18, 4);
null
idMask("310181198002280637", -1, 4);
null



作者:调皮的丹丹
链接:https://www.jianshu.com/p/36b4cbfdc016
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值