zoukankan      html  css  js  c++  java
  • 星号掩码算法

    近期工作中一直再做支付相关的工作,遇到了快捷支付,绑定银行卡时用户输入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();
        }
     
    

    以下是为了凑字数,哈哈,祝大家工作顺利,心想事成,万事如意,合家欢乐,步步高升,平步青云,高高兴兴。

  • 相关阅读:
    linux grep --我最喜欢的命令~~
    svmrank 的误差惩罚因子c选择 经验
    转:机器学习中的算法(2)-支持向量机(SVM)基础
    转:关于python文件操作大全
    python 求两个时间差
    多个excel合并(excel2007)
    oracle12c 新建表空间
    数据库表被锁了
    join ,left join ,right join有什么区别
    最简洁的权限(菜单)控制
  • 原文地址:https://www.cnblogs.com/MissLV/p/7159481.html
Copyright © 2011-2022 走看看