敏感信息脱敏

功能目录

  • 隐藏start下标后面的所有内容
  • 隐藏从start至end下标的内容
  • 姓名脱敏
  • 手机号码脱敏
  • 身份证号脱敏
  • 地址脱敏

代码实现

import org.springframework.util.Assert;

import java.util.Arrays;

/**
 * 脱敏工具类
 */
public class DesensitizedUtil {

    /**
     * 隐藏下标为start后面的内容
     * @param orig 原文
     * @param start 开始隐藏的下标
     * @return
     */
    public static String hide(CharSequence orig,int start){
        int end = orig.length();
        return hide(orig,start,end);
    }

    /**
     * 隐藏从start至end下标的内容
     * @param orig
     * @param start
     * @param end
     * @return
     */
    public static String hide(CharSequence orig,int start,int end){
        int len = orig.length();
        StringBuilder sb = new StringBuilder(orig);
        char[] stars = new char[end-start];
        Arrays.fill(stars,'*');
        sb.replace(start,end,String.valueOf(stars));
        return sb.toString();
    }

    /**
     * 姓名脱敏
     * @param orig 真实姓名
     * @return 脱敏后姓名
     */
    public static String name(CharSequence orig){
        int len = orig.length();
        if(len==2)return hide(orig,1);
        return hide(orig,1,len-1);
    }

    /**
     * 手机号码脱敏
     * @param orig 真实手机号码
     * @return 脱敏后手机号码
     */
    public static String mobilePhone(CharSequence orig){
        int len = orig.length();
        Assert.isTrue(len==11,"手机号码长度应为11位");
        return hide(orig,3,7);
    }

    /**
     * 身份证号脱敏
     * @param orig 真实身份证号
     * @return 脱敏后身份证号
     */
    public static String idCardNum(CharSequence orig){
        int len = orig.length();
        Assert.isTrue(len==18,"身份证号长度应为18位");
        return hide(orig,6,14);
    }

    /**
     * 地址脱敏
     * @param orig 真实地址
     * @return 脱敏后地址
     */
    public static String address(CharSequence orig){
        int len = orig.length();
        if(len<12)return hide(orig,len/2);
        return hide(orig,6);
    }

    public static void main(String[] args) {
        System.out.println(idCardNum("892131200802047585"));
        System.out.println(address("广东省深圳市龙岗区坂田街道长发中路99号101"));
        System.out.println(mobilePhone("13800138000"));
        System.out.println(name("李四"));
        System.out.println(name("王老五"));
        System.out.println(name("泰达米尔"));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值