用户敏感信息掩码工具

金融行业开发不可避免的会涉及到用户的敏感信息,但是为了保护用户隐私,并且根据央行合规要求,不管是数据库日志还有页面都需要进行加密或者掩码,因此在这里分享一个掩码工具。

里面包括了,

/**
 * 手机号显示首3末4位,中间用*号隐藏代替,如:138****4213
 */

/**
 * 电话号码显示区号及末4位,中间用*号隐藏代替,如:010****4213
 */

/**
 * 身份证号显示首6末4位,中间用4个*号隐藏代替,如:421002****1012
 */

/**
 * 银行卡显示首6末4位,中间用4个*号隐藏代替,如:622202****4123
 */

/**
 * 邮箱像是前两位及最后一位字符,及@后邮箱域名信息,如:ye****[email protected]
 */

/**
 * 三个字掩码,如:张晓明 如:张*明
 * 两个字掩码,如:小明 如:*明
 * 多个字掩码,如:张小明明 如:张**明
 */

/**
 * Cvv全隐藏,如: ***
 */

/**
 * Expdate全隐藏,如: ****
 */
/**
 * 类名称: DisplayUtil 
* 类描述: 敏感信息掩码规则
* * @author: hua.jin * @since: 2018/1/8 下午4:18 * @version: 1.0.0 */ public class DisplayUtil { /** * 手机号显示首3末4位,中间用*号隐藏代替,如:138****4213 * * @param mobile * @return */ public static String displayMobile(String mobile) { if(StringUtils.isBlank(mobile) || mobile.length() <= 8) { return mobile; } return wordMask(mobile, 3, 4, "*"); } /** * 电话号码显示区号及末4位,中间用*号隐藏代替,如:010****4213 * * @param telephone * @return */ public static String displayTelephone(String telephone) { if(StringUtils.isBlank(telephone)) { return telephone; } String result; if (telephone.length() > 8) { if (telephone.contains("-")) { String[] temp = telephone.split("-"); result = temp[0] + "****" + temp[1].substring(temp[1].length() - 4, temp[1].length()); } else { result = telephone.substring(0, 3) + "****" + telephone.substring(telephone.length() - 4, telephone.length()); } } else { result = "****" + telephone.substring(telephone.length() - 4, telephone.length()); } return result; } /** * 身份证号显示首6末4位,中间用4个*号隐藏代替,如:421002****1012 * * @param idCard * @return */ public static String displayIDCard(String idCard) { if(StringUtils.isBlank(idCard)) { return idCard; } return wordMask(idCard, 6, 4, "*"); } /** * 银行卡显示首6末4位,中间用4个*号隐藏代替,如:622202****4123 * * @param cardNo * @return */ public static String displayBankCard(String cardNo) { if(StringUtils.isBlank(cardNo) || cardNo.length() < 10) { return cardNo; } return wordMask(cardNo, 6, 4, "*"); } /** * 邮箱像是前两位及最后一位字符,及@后邮箱域名信息,如:ye****[email protected] * * @param email * @return */ public static String displayEmail(String email) { if(StringUtils.isBlank(email)) { return email; } String[] temp = email.split("@"); return wordMask(temp[0], 1, 1, "*") + "@" + temp[1]; } /** * 三个字掩码,如:张晓明 如:张*明 * 两个字掩码,如:小明 如:*明 * 多个字掩码,如:张小明明 如:张**明 * * @param name * @return */ public static String displayName(String name) { if(StringUtils.isBlank(name) || name.length() == 1) { return name; } if (name.length() == 2) { return "*" + name.substring(1, 2); } return wordMask(name, 1, 1, "*"); } /** * Cvv全隐藏,如: *** * * @param cvv * @return */ public static String displayCvv(String cvv) { if(StringUtils.isBlank(cvv)) { return cvv; } return "***"; } /** * Expdate全隐藏,如: **** * * @param expdate * @return */ public static String displayExpdate(String expdate) { if(StringUtils.isBlank(expdate)) { return expdate; } return "****"; } /** * 对字符串进行脱敏处理 -- * * @param word 被脱敏的字符 * @param startLength 被保留的开始长度 前余n位 * @param endLength 被保留的结束长度 后余n位 * @param pad 填充字符 * */ public static String wordMask(String word,int startLength ,int endLength,String pad) { if (startLength + endLength > word.length()) { return org.apache.commons.lang3.StringUtils.leftPad("", word.length() - 1, pad); } String startStr = word.substring(0, startLength); String endStr = word.substring(word.length() - endLength, word.length()); return startStr + org.apache.commons.lang3.StringUtils.leftPad("", word.length() - startLength - endLength, pad) + endStr; } public static void main(String[] args) { System.out.println(displayMobile("13731999701")); System.out.println(displayName("小华华华")); System.out.println(displayName("小华华")); System.out.println(displayName("小华")); System.out.println(displayName("华")); System.out.println(displayEmail("[email protected]")); System.out.println(displayEmail("[email protected]")); } }

 

你可能感兴趣的:(常用小工具)