近期工作中一直再做支付相关的工作,遇到了快捷支付,绑定银行卡时用户输入4要素【姓名,手机号,身份证,银行卡号】,显示用户卡史的时候,要做掩码处理,
防止暴漏隐私,所以做了一个算法用星号替换重要数据,分享给大家。
** * 字符串转为*掩码的格式 * * @param str * @return */ public String convertToStart(String str) { String result = str; int len = str.length(); Map<Integer,String> mapRule=convertToStartRule(len); String ruleStr=mapRule.get(len); String[] ruleArr=ruleStr.split("\\|"); int frontIndex=Integer.parseInt( ruleArr[0]); int subLength=Integer.parseInt(ruleArr[1]); String frontStr= str.substring(0,frontIndex); String backStr=str.substring(frontIndex+subLength,len); result=frontStr+printStart(subLength)+backStr; return result; } /** * 指定长度的字符串转为*掩码 * @param len * @return */ private Map<Integer, String> convertToStartRule(int len) { Map<Integer, String> m = new HashMap<Integer, String>(); String indexRule =""; switch (len) { case 2: case 3: { indexRule="0|1"; break; } case 11: { indexRule="3|4"; break; } case 18: { indexRule="4|10"; break; } default:{ if(len>3) { int mol = len % 4; int s=len/4; indexRule=s+"|"+(2*s+mol); }else { indexRule="0|1"; } break; } } m.put(len,indexRule); return m; } /** * 打印指定长度星号 * @param length * @return */ public String printStart(int length){ StringBuilder start=new StringBuilder(); for(int i=0;i<length;i++){ start.append("*"); } return start.toString(); }
以下是为了凑字数,哈哈,祝大家工作顺利,心想事成,万事如意,合家欢乐,步步高升,平步青云,高高兴兴。
时间: 2024-10-14 13:48:37