zoukankan      html  css  js  c++  java
  • 原版js生成银行卡号

    function init() {
        undefined = "undefined";
        mkCClist();
    }
    
    function ccchk(cdi) {
        document.console.output1.value = "";
        if (cdi != "" && cdi != null) {
            document.console.output1.value = "Processing...";
            var cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ|#()[]{}?%&=!?+*.,;:'");
            var cn = chkCard(cf);
            var clcd = chkLCD(cf);
            var clcdt = "NOT PASSED";
            if (clcd) {
                clcdt = "PASSED";
            }
            var ccck = chkCCCksum(cf, cn);
            var ccckt = "NOT PASSED";
            if (ccck) {
                ccckt = "PASSED";
            }
            var cjd = "INVALID CARD NUMBER";
            if (clcd && ccck) {
                cjd = "This card number appears to be valid.";
            }
            var out = "";
            out += "Card type       : " + cn + "
    ";
            out += "CCChecksum      : " + ccckt + "
    ";
            out += "Luhn Check Digit: " + clcdt + "
    ";
            out += cjd;
            document.console.output1.value = out;
        }
    }
    
    function ccngen(p, tr) {
        tr *= 1.0;
        if (tr < 1 || tr == null) {
            tr = 1;
        }
        document.console.output2.value = "";
        if (p != "" && p != null) {
            var cn = chkCard(p);
            for (var i = tr; i >= 1; i--) {
                document.console.output2.value = "Processing... " + i;
                var cdi = sbtStringSpRnd(p, "x", "0123456789");
                var cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");
                var clcd = chkLCD(cf);
                var ccck = chkCCCksum(cf, cn);
                if (clcd && ccck) {
                    break;
                }
            }
            var out = "Couldn't find any valid number for given pattern";
            if (clcd && ccck) {
                var cn = chkCard(cdi);
                var ccnspc = "";
                for (var j = 0; j <= 3; j++) {
                    if (document.console.ccnsp.options[j].selected) {
                        break;
                    }
                }
                if (j == 1) {
                    ccnspc = " ";
                }
                if (j == 2) {
                    ccnspc = "-";
                }
                var cdif = "";
                for (var i = 1; i <= cdi.length; i++) {
                    var aS = midS(cdi, i, 1);
                    if (aS == " ") {
                        aS = ccnspc;
                    }
                    cdif += aS;
                }
                var out = "Valid " + cn + " # found:
    " + cdif;
            }
            document.console.output2.value = out;
        }
    }
    
    function chgccp() {
        mkCClist();
        for (var j = 0; j <= tw - 1; j++) {
            if (document.console.ccpp.options[j].selected) {
                break;
            }
        }
        document.console.ccp.value = c[j + 1];
    }
    
    function chkCard(cdi) {
        cdi += "";
        if (c[1] == undefined || c[1] == null || c[1] == "") {
            mkCClist();
        }
        var ccn = 0;
        var cn = "unknown"
        var cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");
        if (leftS(cf, 1) == "4") {
            cf = leftS(cf, 8);
        }
        for (var i = 1; i <= tw; i++) {
            var cct = sbtString(c[i], " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");
            if (leftS(cf, 1) == "4") {
                cct = leftS(cct, 8);
            }
            var ccc = cmpPattern(cf, cct);
            if (ccc) {
                ccn = i;
                break;
            }
        }
        if (ccn > 0) {
            cn = cd[i];
        }
        return cn;
    }
    
    function chkCCCksum(cf, cn) {
        var r = false;
        var w = "21";
        // if (linstr(cn,"AmEx") || linstr(cn,"Diner")) {var w="12";}
        var ml = "";
        var j = 1;
        for (var i = 1; i <= cf.length - 1; i++) {
            var m = midS(cf, i, 1) * midS(w, j, 1);
            m = sumDigits(m);
            ml += "" + m;
            j++;
            if (j > w.length) {
                j = 1;
            }
        }
        var ml2 = sumDigits(ml, -1);
        var ml1 = (sumDigits(ml2, -1) * 10 - ml2) % 10;
        if (ml1 == rightS(cf, 1)) {
            r = true;
        }
        return r;
    }
    
    function chkLCD(cf) {
        var r = false;
        cf += "";
        var bl = isdiv(cf.length, 2);
        var ctd = 0;
        for (var i = 1; i <= cf.length; i++) {
            var cdg = midS(cf, i, 1);
            if (isdiv(i, 2) != bl) {
                cdg *= 2;
                if (cdg > 9) {
                    cdg -= 9;
                }
            }
            ctd += cdg * 1.0;
        }
        if (isdiv(ctd, 10)) {
            r = true;
        }
        return r;
    }
    
    function mkCClist() {
        tw = 2;
        c = new makeArray(tw);
        cd = new makeArray(tw);
        var i = 1;
        c[i] = "622202360547xxxxxxx";
        cd[i] = "工商银行";
        i++;
        c[i] = "622617310xxxxxxx";
        cd[i] = "民生银行";
        i++;
    }
    
    // Powered by MilkieX - http://www.ElfQrin.com
    function leftS(aS, n) {
        aS += "";
        var rS = "";
        if (n >= 1) {
            rS = aS.substring(0, n);
        }
        return rS;
    }
    
    function rightS(aS, n) {
        aS += "";
        var rS = "";
        if (n >= 1) {
            rS = aS.substring(aS.length - n, aS.length);
        }
        return rS;
    }
    
    function midS(aS, n, n2) {
        aS += "";
        var rS = "";
        if (n2 == null || n2 == "") {
            n2 = aS.length;
        }
        n *= 1;
        n2 *= 1;
        if (n < 0) {
            n++;
        }
        rS = aS.substring(n - 1, n - 1 + n2);
        return rS;
    }
    
    function linstr(aS, bS) {
        aS += "";
        bS += "";
        var r = false;
        if (leftS(aS, bS.length) == bS) {
            r = true;
        }
        return r;
    }
    
    function sbtString(s1, s2) {
        var ous = "";
        s1 += "";
        s2 += "";
        for (var i = 1; i <= s1.length; i++) {
            var c1 = s1.substring(i - 1, i);
            var c2 = s2.indexOf(c1);
            if (c2 == -1) {
                ous += c1;
            }
        }
        return ous;
    }
    
    function sbtStringSpRnd(s1, s2, bS) {
        if (bS == null || bS == "") {
            bS = "0123456789";
        }
        var ous = "";
        bS += "";
        for (var i = 1; i <= s1.length; i++) {
            var c1 = s1.substring(i - 1, i);
            var c2 = s2.indexOf(c1);
            if (c2 == -1) {
                ous += c1;
            } else {
                ous += midS(bS, Math.floor(Math.random() * (bS.length - 1)) + 1, 1);
            }
        }
        return ous;
    }
    
    function cmpPattern(a, p, x) {
        if (x == "" || x == null) {
            x = "x";
        }
        x = "" + x.substring(0, 1);
        a += "";
        p += "";
        r = false;
        mc = 0;
        if (a.length == p.length) {
            for (var i = 1; i <= a.length; i++) {
                a1 = midS(a, i, 1);
                p1 = midS(p, i, 1);
                if (a1 == p1 || p1 == x) {
                    mc++;
                }
            }
        }
        if (mc == a.length) {
            r = true;
        }
        return r;
    }
    
    function isdiv(a, b) {
        if (b == null) {
            b = 2;
        }
        a *= 1.0;
        b *= 1.0;
        var r = false;
        if (a / b == Math.floor(a / b)) {
            r = true;
        }
        return r;
    }
    
    function sumDigits(n, m) {
        if (m == 0 || m == null) {
            m = 1;
        }
        n += "";
        if (m > 0) {
            while (n.length > m) {
                var r = 0;
                for (var i = 1; i <= n.length; i++) {
                    r += 1.0 * midS(n, i, 1);
                }
                n = "" + r;
            }
        } else {
            for (var j = 1; j <= Math.abs(m); j++) {
                var r = 0;
                for (var i = 1; i <= n.length; i++) {
                    r += 1.0 * midS(n, i, 1);
                }
                n = "" + r;
            }
        }
        r = n;
        return r;
    }
    
    function makeArray(n) {
        this.length = n;
        for (var i = 1; i <= n; i++) {
            this[i] = 0;
        }
        return this;
    }
    
    // End of MilkieX
    //var dl=""+document.location; dl=dl.toLowerCase(); if (dl.substring(0,22)!="http://www.elfqrin.com" && dl.substring(0,16)!="file:///c|/data/") {window.location="/";}
    init();

     改成java写法:

    package cn.x.common;
    
    import java.text.DecimalFormat;
    
    public class BankCardGenerator {
        
        
        public static void main(String[] args) {
            System.out.println(ccngen("6226173107771021",1000));
            System.out.println(ccngen("6226173102726523",1000));
            System.out.println(ccngen("6226173102070486",1000));
            System.out.println(ccngen("6226173100366066",1000));
            System.out.println(ccngen("6226173108201666",1000));
            System.out.println(ccngen("622617310xxxxxxx",1000));
        }
    
    
        private static String ccngen(String pattern, int tryTimes) {
            boolean genSuccess = false;
            String validCardNo = "";
            for(int i = 0; i < tryTimes; i++) {
                String randomSevenNum = new DecimalFormat("0000000").format(Math.random() * 10000000);
                String testCardNo = "";
                if(pattern.contains("xxxxxxx")) {
                    testCardNo = pattern.replaceAll("x", "") + randomSevenNum ;
                } else {
                    testCardNo = pattern ;
                }
                System.out.println("test " + i + ": " + testCardNo);
                if (chkLCD(testCardNo) && chkCCCksum(testCardNo)) {
                    genSuccess = true ;
                    validCardNo = testCardNo;
                    break;
                }
                
                if(!pattern.contains("xxxxxxx")) {break;}
            }
            if(genSuccess) {
                return validCardNo;
            } else {
                return "genCardNoFailed!";
            }
        }
    
    
        private static boolean chkCCCksum(String cf) {
            boolean r = false;
            String w = "21";
            String ml = "";
            int j = 1;
            for (int i = 1; i <= cf.length() - 1; i++) {
                int m =Integer.valueOf(midS(cf, i, 1)) * Integer.valueOf(midS(w, j, 1));
                m =Integer.valueOf( sumDigits(String.valueOf(m),1) );
                ml += "" + m;
                j++;
                if (j > w.length()) {
                    j = 1;
                }
            }
            int ml2 = Integer.valueOf(sumDigits(ml, -1) );
            int ml1 = (Integer.valueOf(sumDigits(String.valueOf(ml2), -1)) * 10 - ml2) % 10;
            if (ml1 == rightS(cf, 1)) {
                r = true;
            }
            return r;
        }
    
    
        private static int rightS(String aS, int n) {
            String rS = "";
            if (n >= 1) {
                rS = aS.substring(aS.length() - n, aS.length());
            }
            return Integer.valueOf(rS);
        }
    
    
        private static String sumDigits(String n ,int m) {
    //          if (m == 0 ) {
    //                m = 1;
    //            }
                int r = 0;
                if (m > 0) {
                    while (n.length() > m) {
                        for (int i = 1; i <= n.length(); i++) {
                            r +=  Integer.valueOf(midS(n, i, 1));
                        }
                        n = "" + r;
                    }
                } else {
                    for (int j = 1; j <= Math.abs(m); j++) {
                        for (int i = 1; i <= n.length(); i++) {
                            r += Integer.valueOf( midS(n, i, 1));
                        }
                        n = "" + r;
                    }
                }
    //            r = n;
                return n;
        }
    
    
        private static boolean chkLCD(String cf) {
             boolean r = false;
                cf += "";
                boolean bl = isdiv(cf.length(), 2);
                int ctd = 0;
                for (int i = 1; i <= cf.length(); i++) {
                    int cdg = Integer.valueOf(midS(cf, i, 1));
                    if (isdiv(i, 2) != bl) {
                        cdg *= 2;
                        if (cdg > 9) {
                            cdg -= 9;
                        }
                    }
                    ctd += cdg * 1.0;
                }
                if (isdiv(ctd, 10)) {
                    r = true;
                }
                return r;
        }
    
    
        private static boolean isdiv(int a, int b) {
                a *= 1.0;
                b *= 1.0;
                boolean r = false;
                if (a / b == Math.floor(a / b)) {
                    r = true;
                }
                return r;
        }
    
    
        private static String sbtStringSpRnd(String s1, String s2, String bS) {
            if (bS == "") {
                bS = "0123456789";
            }
            String ous = "";
            bS += "";
            for (int i = 1; i <= s1.length(); i++) {
                String c1 = s1.substring(i - 1, i);
                int c2 = s2.indexOf(c1);
                if (c2 == -1) {
                    ous += c1;
                } else {
                    ous += midS(bS, (int)Math.floor(Math.random() * (bS.length() - 1)) + 1, 1);
                }
            }
            return ous;
        }
    
    
        private static String chkCard(String cdi) {
            cdi += "";  
            int ccn = 0;
            String cn = "unknown" ;
            String cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");
            if (leftS(cf, 1) == "4") {
                cf = leftS(cf, 8);
            }
            String[] c = {"","622202360547xxxxxxx","622617310xxxxxxx"};
            String[] cd = {"","工商银行","民生银行"};
            for (int i = 1; i <= 2; i++) {
                String cct = sbtString(c[i], " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");
                if (leftS(cf, 1) == "4") {
                    cct = leftS(cct, 8);
                }
                boolean ccc = cmpPattern(cf, cct);
                if (ccc) {
                    ccn = i;
                    break;
                }
            }
            if (ccn > 0) {
                cn = cd[ccn];
            }
            return cn;
        }
    
    
    
        private static String sbtString(String s1, String s2) {
            String ous = "";
            s1 += "";
            s2 += "";
            for (int i = 1; i <= s1.length(); i++) {
                String c1 = s1.substring(i - 1, i);
                int c2 = s2.indexOf(c1);
                if (c2 == -1) {
                    ous += c1;
                }
            }
            return ous;
        }
        
        private static String leftS(String as, int n) {
            as += "";
            String rS = "";
            if (n >= 1) {
                rS = as.substring(0, n);
            }
            return rS;
        }
    
        private static boolean cmpPattern(String a, String p) {
            String x = null;
            if (x == "" || x == null) {
                x = "x";
            }
            x = "" + x.substring(0, 1);
            a += "";
            p += "";
            boolean r = false;
            int mc = 0;
            if (a.length() == p.length()) {
                for (int i = 1; i <= a.length(); i++) {
                    String a1 = midS(a, i, 1);
                    String p1 = midS(p, i, 1);
                    if (a1 == p1 || p1 == x) {
                        mc++;
                    }
                }
            }
            if (mc == a.length()) {
                r = true;
            }
            return r;
        }
    
    
        private static String midS(String aS, int n, int n2) {
               aS += "";
                String rS = "";
                n *= 1;
                n2 *= 1;
                if (n < 0) {
                    n++;
                }
                rS = aS.substring(n - 1, n - 1 + n2);
                return rS;
        }
    
        
        
    }
    View Code
  • 相关阅读:
    python 正则表达式提取返回内容
    python session保持登录,新增地址,并删除,由观察可知,address_id决定删除的内容;
    unittest执行顺序,使用unittest.main()按照test开头,由09,AZ,az的顺序执行; 可使用TestSuite类的addTest方法改变执行顺序;
    开源系统DVWA,ECshop
    链接(url)中不能有汉字,遇到汉字,需要使用quote转换之后使用
    python 登录并获取session,使用session新增ecshop的草稿
    unittest单元测试,基于java的junit测试框架
    jmeter插件扩展
    使用响应的json数据判断订单查询是否成功;
    C言语教程第五章:函数(2)
  • 原文地址:https://www.cnblogs.com/xiaodebing/p/9814904.html
Copyright © 2011-2022 走看看