星号掩码算法

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

星号掩码算法的相关文章

WebSocket协议:5分钟从入门到精通

一.内容概览 WebSocket的出现,使得浏览器具备了实时双向通信的能力.本文由浅入深,介绍了WebSocket如何建立连接.交换数据的细节,以及数据帧的格式.此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的. 二.什么是WebSocket HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议.它基于TCP传输协议,并复用HTTP的握手通道. 对大部分web开发者来说,上面这段描述有点枯燥,其实只要记住几点: WebSocket可以在浏

WebSocket:5分钟从入门到精通

一.内容概览 WebSocket的出现,使得浏览器具备了实时双向通信的能力.本文由浅入深,介绍了WebSocket如何建立连接.交换数据的细节,以及数据帧的格式.此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的. 二.什么是WebSocket HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议.它基于TCP传输协议,并复用HTTP的握手通道. 对大部分web开发者来说,上面这段描述有点枯燥,其实只要记住几点: WebSocket可以在浏

WebSocket 详解

WebSocket 出现前 构建网络应用的过程中,我们经常需要与服务器进行持续的通讯以保持双方信息的同步.通常这种持久通讯在不刷新页面的情况下进行,消耗一定的内存资源常驻后台,并且对于用户不可见.在 WebSocket 出现之前,我们有一下解决方案: 传统轮询(Traditional Polling) 当前Web应用中较常见的一种持续通信方式,通常采取 setInterval 或者 setTimeout 实现.例如如果我们想要定时获取并刷新页面上的数据,可以结合Ajax写出如下实现: setIn

【特征匹配】RANSAC算法原理与源码解析

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50217655 随机抽样一致性(RANSAC)算法,可以在一组包含"外点"的数据集中,采用不断迭代的方法,寻找最优参数模型,不符合最优模型的点,被定义为"外点".在图像配准以及拼接上得到广泛的应用,本文将对RANSAC算法在OpenCV中角点误匹配对的检测中进行解析. 1.RANSAC原理 OpenCV中滤除误匹配对采用RANSAC算法寻找一个最佳

k-d tree算法详解

k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构.主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索). 1.应用背景 SIFT算法中做特征点匹配的时候就会利用到k-d树.而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题.针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中一种. 索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),另一种是K近邻查询

php算法

1.首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半. 思路:多少行for一次,然后在里面空格和星号for一次. 1 2 3 4 5 6 <?php for($i=0;$i<=3;$i++){   echo str_repeat(" ",3-$i);   echo str_repeat("*",$i*2+1);   echo '<br/>'; } 2.冒泡排序,C里基础算法,从小到大对一组数排序. 思路:这题从小到大,

OpenCV实践(2)- 矩阵的掩码操作

1 描述 在对数字图像进行处理时,我们一般都会在空间域(spatial domain)或者频域(frequency domain)中进行.所谓"空间域",实际上指的是图像本身,在空间域上的操作常常是改变像素点的值,也就是经过一个映射(我们所做的变换,如滤波等),将原来的f(x,y)变换为新的g(x,y).而"频域",它的数学基础是法国学者傅里叶提出的傅里叶级数和随后发展起来的傅里叶变换.在这其中起到重要作用的,就是电子计算机的不断完善和快速傅里叶变换(FFT)算法的

路由表的建立算法

1.路由表 1)什么是路由表 路由表是指路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量. 2)路由表分类 (1)静态路由表 由系统管理员事先设置好固定的路由表称之为静态路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变. (2)动态路由表 动态路由表是路由器根据网络系统的运行情况而自动调整的路由表.路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习

A*算法深入

A*算法思想容易理解,但要想设计出好的A*算法,则必需要全面深入了解它.在本文章中接下来的内容中,将全面深入探讨该话题.如果对该算法还没有理解的话,则请先查阅上篇文章<A*算法入门>,然后再看该文章. 一:理论篇 探讨:估值函数 A*算法之所以效率高是因为它是启发式的搜索算法.它是在Dijkstra算法的基础上,增加了书籍网路信息的评估,也就是增加了约束条件,从而改变算法的走向 -------- 即:是带有目的性的往目标节点逼近,而不是你Dijkstra算法那样盲目搜索.因此,A*算法的执行效