开发中对敏感字段进行脱敏

文章介绍了在项目中处理敏感数据时的脱敏方法,包括全脱敏、姓名部分显示、手机号码显示前3后4位、地址显示部分字符、身份证显示后4位以及编号隐藏一半等策略,提供了相应的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

在我们的项目中,经常会遇到被要求对敏感数据进行脱敏的处理。比如用户的手机号,身份证信息,银行卡号信息,等等信息,不同权限的用户在前端画面看见的是不同的,低权限用户只能看到中间带****的信息。

常见脱敏方式

根据权限来进行脱敏,这个不用说了,很简单。这边主要讲几种常见的脱敏格式,手机,身份证等。

/**
     * 全脱敏
     *
     * @param name
     * @return
     */
    public static String setAllSensitive(String name) {
        if (StrUtil.isNotBlank(name)) {
            name = Strings.repeat("*", name.length());
        }
        return name;
    }

    /**
     * 姓名脱敏:3个字及以下显示1个字,3个字以上显示2个字
     *
     * @param name
     * @return
     */
    public static String tmName(String name) {
        if (null == name || name.length() < 2) {
            return name;
        }
        String tmName = "";
        if (name.length() > 3) {
            tmName = StringUtils.right(name, 2);
        } else {
            tmName = StringUtils.right(name, 1);
        }
        tmName = StringUtils.leftPad(tmName, StringUtils.length(name), "*");
        return tmName;
    }

    /**
     * 手机号码脱敏:显示前3后4
     *
     * @param phone
     * @return
     */
    public static String tmPhone(String phone) {
        if (StringUtils.isEmpty(phone)) {
            return phone;
        }
        if (phone.length() >= 11) {
            return phone.replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2");
        } else {
            return phone.replaceAll("(\\d{2})\\d*(\\d{2})", "$1**$2");
        }
    }

    /**
     * 地址脱敏:12字及以下显示6个字,12字以上显示不超过50%
     *
     * @param address
     * @return
     */
    public static String tmAddress(String address) {
        if (null == address || address.length() < 3) {
            return address;
        }
        String tmAddress = "";
        if (address.length() >= 12) {
            tmAddress = StringUtils.left(address, 6);
        } else {
            tmAddress = StringUtils.left(address, address.length() / 2);
        }
        tmAddress = StringUtils.rightPad(tmAddress, StringUtils.length(address), "*");
        return tmAddress;
    }

    /**
     * 身份证脱敏:显示后4位
     *
     * @param cardId
     * @return
     */
    public static String tmCardCode(String cardId) {
        if (null == cardId || cardId.length() < 4) {
            return cardId;
        } else {
            //显示后4位
            String sfzRight = StringUtils.right(cardId, 4);
            sfzRight = StringUtils.leftPad(sfzRight, StringUtils.length(cardId), "*");
            return sfzRight;
        }
    }

    /**
     * 编号脱敏:隐藏百分之50
     *
     * @param code
     * @return
     */
    public static String tmCode(String code) {
        if (null == code) {
            return code;
        }
        String tmCode = StringUtils.left(code, code.length() / 2);
        tmCode = StringUtils.rightPad(tmCode, StringUtils.length(code), "*");
        return tmCode;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值