姓名、身份证、银行卡等保密性 使用*替换

在开发过程中,很大部分都会将姓名、身份证、银行卡等重要信息的部分使用*替换,这样就会提高了一定的保密性,如何做呢?直接上代码

示例:

姓名、身份证、银行卡等保密性 使用*替换

工具类

public class StringReplaceUtil {
    /**
     * 根据姓名的不同长度,来进行替换 ,达到保密效果
     *
     * @param userName 姓名
     * @return 替换后的姓名
     */
    public static String userNameReplaceWithStar(String userName) {
        String userNameAfterReplaced = "";

        if (userName == null){
            userName = "";
        }

        int nameLength = userName.length();

        if (nameLength <= 1) {
            userNameAfterReplaced = "";
        } else if (nameLength >= 2) {
            userNameAfterReplaced = replaceAction(userName, "(?<=\\w{1})\\w(?=\\w{0})");
        }

        return userNameAfterReplaced;
    }

    /**
     * 身份证号替换,保留前六位和后四位
     *
     * 如果身份证号为空 或者 null ,返回null ;否则,返回替换后的字符串;
     *
     * @param idCard 身份证号
     * @return
     */
    public static String idCardReplaceWithStar(String idCard) {

        if (idCard.isEmpty() || idCard == null) {
            return null;
        } else {
            return replaceAction(idCard, "(?<=\\d{6})\\d(?=\\d{4})");
        }
    }

    /**
     * 银行卡替换,保留后四位
     *
     * 如果银行卡号为空 或者 null ,返回null ;否则,返回替换后的字符串;
     *
     * @param bankCard 银行卡号
     * @return
     */
    public static String bankCardReplaceWithStar(String bankCard) {

        if (bankCard.isEmpty() || bankCard == null) {
            return null;
        } else {
            return replaceAction(bankCard, "(?<=\\d{0})\\d(?=\\d{4})");
        }
    }

    /**
     * 实际替换动作
     *
     * @param username username
     * @param regular  正则
     * @return
     */
    private static String replaceAction(String username, String regular) {
        return username.replaceAll(regular, "*");
    }

}
如果是用户名而不是真实的姓名,那就根据需求来做判断展示:

int nameLength = userName.length();

if (nameLength <= 1) {
    userNameAfterReplaced = "*";
} else if (nameLength == 2) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w{0})\\w(?=\\w{1})");
} else if (nameLength >= 3 && nameLength <= 6) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w{1})\\w(?=\\w{1})");
} else if (nameLength == 7) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w1})\\w(?=\\w{2})");
} else if (nameLength == 8) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w{2})\\w(?=\\w2})");
} else if (nameLength == 9) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w{2})\\w(?=\\w{3})");
} else if (nameLength == 10) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w{3})\\w(?=\\w{3})");
} else if (nameLength >= 11) {
    userNameAfterReplaced = replaceAction(userName, "(?<=\\w{3})\\d(?=\\w{4})");
}

项目中使用:

userName.setText(StringReplaceUtil.userNameReplaceWithStar(userName_));
userCard.setText(StringReplaceUtil.idCardReplaceWithStar(userCard_));

无聊中就想了一个万能的办法,不管需求怎么要求咱们可以直接用截取字符串的办法来实现保密:

下面的是我的需求:

* 用户手机号显示:中间显示为3个“*” 前后都显示三位数,对于小于6位的昵称的处理:昵称不足六位,中间仍然显示三位* ,
* 若昵称是三位显示 11***1 ,昵称四位显示 11***11,昵称5位 111***11 ,六位及以上 显示同用户手机号 即前三位+“*”+后三位

public static String userNameReplace(String userName) {
    String userNameAfterReplaced = "";

    if (userName == null){
        userName = "";
    }

    int nameLength = userName.length();

    if (nameLength <= 1) {
        userNameAfterReplaced = "";
    } else if (nameLength == 2) {

        userNameAfterReplaced = userName.substring(0, 1) + "***" + userName.substring(1, 2);
    } else if (nameLength == 3) {

        userNameAfterReplaced = userName.substring(0, 2) + "***" + userName.substring(2, 3);
    }else if (nameLength == 4) {

        userNameAfterReplaced = userName.substring(0, 2) + "***" + userName.substring(2, 4);
    }else if (nameLength == 5) {

        userNameAfterReplaced = userName.substring(0, 3) + "***" + userName.substring(3, 5);
    }else if (nameLength >= 6) {

        userNameAfterReplaced = userName.substring(0, 3) + "***" + userName.substring(nameLength-3, nameLength);
    }

    return userNameAfterReplaced;

}
中间的*是根据需求来的,比如:123456,显示前3个和后2个字符,中间加5个*

userNameAfterReplaced = userName.substring(0, 3) + "*****" + userName.substring(4, 6);

OK,这样就完成了