姓名、身份证、银行卡等保密性 使用*替换
在开发过程中,很大部分都会将姓名、身份证、银行卡等重要信息的部分使用*替换,这样就会提高了一定的保密性,如何做呢?直接上代码
示例:
工具类
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,这样就完成了