java中姓名、手机号、证件号、银行卡号等脱敏

最近开发,需要对一些敏感信息进行脱敏处理,就整理一个简单的工具类
代码如下:

public class DataMaskUtil {
    private final static String REPLACE_CHAR = "*";

    /**
     * 脱敏
     *
     * @param str   需脱敏的字符串
     * @param left  左边需保留的位数
     * @param right 右边需保留的位数
     * @return
     */
    public static String around(String str, int left, int right) {
        if (str == null) {
            return "";
        }
        String regex = String.format("(?<=.{%d}).(?=.{%d})", left, right);
        return str.replaceAll(regex, REPLACE_CHAR);
    }

    //姓名
    public static String nameMask(String name) {
        int length = name.length();
        String result = name;
        if (length == 2) {
            // 两位姓名,展示第二位
            result = around(name, 0, 1);
        } else if (length > 2) {
            // 三位及以上姓名,显示第一个字和最后一个字
            result = around(name, 1, 1);
        }

        return result;
    }

    //手机号
    public static String phoneMask(String phoneNum) {
        int length = phoneNum.length();
        //长度11位,展示前3后3
        if (length == 11) {
            return around(phoneNum, 3, 3);
        }
        //12位,展示前4后3
        return around(phoneNum, 4, 3);
    }

    //证件号
    public static String idNoMask(String idNo) {
        int length = idNo.length();
        String result = idNo;
        if (length == 15) {
            //长度15位,7-12位且最后一位屏蔽
            result = around(around(idNo, 6, length - 12), length - 1, 0);
        } else if (length == 18) {
            //18位,7-14位且最后两位屏蔽
            result = around(around(idNo, 6, length - 14), length - 2, 0);
        } else if (length > 2) {
            // 除身份证外其他证件类型只展示第一位和最后一位
            result = around(idNo, 1, 1);
        }
        return result;
    }

    //银行卡号
    public static String cardNoMask(String cardNo) {
        int length = cardNo.length();
        return around(cardNo, 0, 4);
    }

}

希望对你有所帮助。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
姓名手机号码和邮箱脱敏是信息安全的一项重要工作。在Java,我们可以使用以下方法来实现脱敏。 一、姓名脱敏: 对于姓名脱敏,可以使用字符替换或者编码方式来处理。可以使用字符串的substring方法截取部分姓名并用特定字符代替。例如,将"张三"脱敏为"张*",可以使用以下代码实现: ``` String name = "张三"; String maskedName = name.substring(0,1) + "*"; ``` 二、手机号脱敏: 对于手机号脱敏,一般只显示部分码,保留前几位和后几位,间部分用星或者其他特定字符代替。可以使用正则表达式和replace方法来实现。例如,将"13812345678"脱敏为"138****5678",可以使用以下代码实现: ``` String phoneNumber = "13812345678"; String maskedPhoneNumber = phoneNumber.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"); ``` 三、邮箱脱敏: 对于邮箱脱敏,一般只显示部分邮箱地址,保留邮箱的前几位和后几位,间部分用星或其他特定字符代替。可以使用正则表达式和replace方法来实现。例如,将"example@example.com"脱敏为"ex*****@example.com",可以使用以下代码实现: ``` String email = "example@example.com"; String maskedEmail = email.replaceAll("(\\w{2})\\w*(\\w{1})", "$1****$2"); ``` 以上是在Java常用的姓名手机号码和邮箱脱敏的示例代码。在真正应用,还需要根据具体的业务需要和安全要求进行灵活调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值