bank_card.js

  1 function init() {
  2     undefined = "undefined";
  3     mkCClist();
  4 }
  5 
  6 function ccchk(cdi) {
  7     output1 = "";
  8     if (cdi != "" && cdi != null) {
  9         output1 = "Processing...";
 10         var cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ|\#()[]{}?%&=!?+*.,;:'");
 11         var cn = chkCard(cf);
 12         var clcd = chkLCD(cf);
 13         var clcdt = "NOT PASSED";
 14         if (clcd) {
 15             clcdt = "PASSED";
 16         }
 17         var ccck = chkCCCksum(cf, cn);
 18         var ccckt = "NOT PASSED";
 19         if (ccck) {
 20             ccckt = "PASSED";
 21         }
 22         var cjd = "INVALID CARD NUMBER";
 23         if (clcd && ccck) {
 24             cjd = "This card number appears to be valid.";
 25         }
 26         var out = "";
 27         out += "Card type       : " + cn + "\n";
 28         out += "CCChecksum      : " + ccckt + "\n";
 29         out += "Luhn Check Digit: " + clcdt + "\n";
 30         out += cjd;
 31         output1 = out;
 32     }
 33 }
 34 
 35 function ccngen(p, tr) {
 36     tr *= 1.0;
 37     if (tr < 1 || tr == null) {
 38         tr = 1;
 39     }
 40     output2 = "";
 41     if (p != "" && p != null) {
 42         var cn = chkCard(p);//去掉非数字
 43         for (var i = tr; i >= 1; i--) {
 44             output2 = "Processing... " + i;
 45             var cdi = sbtStringSpRnd(p, "x", "0123456789");  //非x保留,x替换为一个0-9的随机数
 46             var cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");//数字保留字母去掉
 47             var clcd = chkLCD(cf);
 48             var ccck = chkCCCksum(cf, cn);
 49             if (clcd && ccck) {
 50                 break;
 51             }
 52         }
 53         var out = "Couldn't find any valid number for given pattern";
 54         if (clcd && ccck) {
 55             var cn = chkCard(cdi);
 56             var ccnspc = "";
 57    //         for (var j = 0; j <= 3; j++) {
 58    //             if (document.console.ccnsp.options[j].selected) {
 59    //                 break;
 60    //             }
 61             }
 62 //            if (j == 1) {
 63 //                ccnspc = " ";
 64 //            }
 65 //            if (j == 2) {
 66 //                ccnspc = "-";
 67 //            }
 68             var cdif = "";
 69             for (var i = 1; i <= cdi.length; i++) {
 70                 var aS = midS(cdi, i, 1);
 71                 if (aS == " ") {
 72                     aS = ccnspc;
 73                 }
 74                 cdif += aS;
 75             }
 76             var out =  cdif;
 77         }
 78         output2 = out;
 79         return output2;
 80     }
 81 
 82 
 83 function chgccp() {
 84     mkCClist();
 85 //    for (var j = 0; j <= tw - 1; j++) {
 86 //        if (document.console.ccpp.options[j].selected) {
 87 //            break;
 88 //        }
 89 //    }
 90 //    document.console.ccp.value = c[j + 1];
 91 }
 92 
 93 function chkCard(cdi) {
 94     cdi += "";
 95     if (c[1] == undefined || c[1] == null || c[1] == "") {
 96         mkCClist();
 97     }
 98     var ccn = 0;
 99     var cn = "unknown"
100     var cf = sbtString(cdi, " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");//去掉非数字
101     if (leftS(cf, 1) == "4") {
102         cf = leftS(cf, 8);
103     }
104     for (var i = 1; i <= tw; i++) {
105         var cct = sbtString(c[i], " -/abcdefghijklmnopqrstuvwyzABCDEFGHIJLMNOPQRSTUVWYZ");
106         if (leftS(cf, 1) == "4") {
107             cct = leftS(cct, 8);
108         }
109         var ccc = cmpPattern(cf, cct);
110         if (ccc) {
111             ccn = i;
112             break;
113         }
114     }
115     if (ccn > 0) {
116         cn = cd[i];
117     }
118     return cn;
119 }
120 
121 function chkCCCksum(cf, cn) {
122     var r = false;
123     var w = "21";
124     // if (linstr(cn,"AmEx") || linstr(cn,"Diner")) {var w="12";}
125     var ml = "";
126     var j = 1;
127     for (var i = 1; i <= cf.length - 1; i++) {
128         var m = midS(cf, i, 1) * midS(w, j, 1);
129         m = sumDigits(m);
130         ml += "" + m;
131         j++;
132         if (j > w.length) {
133             j = 1;
134         }
135     }
136     var ml2 = sumDigits(ml, -1);
137     var ml1 = (sumDigits(ml2, -1) * 10 - ml2) % 10;
138     if (ml1 == rightS(cf, 1)) {
139         r = true;
140     }
141     return r;
142 }
143 
144 function chkLCD(cf) {
145     var r = false;
146     cf += "";
147     var bl = isdiv(cf.length, 2);
148     var ctd = 0;
149     for (var i = 1; i <= cf.length; i++) {
150         var cdg = midS(cf, i, 1);
151         if (isdiv(i, 2) != bl) {
152             cdg *= 2;
153             if (cdg > 9) {
154                 cdg -= 9;
155             }
156         }
157         ctd += cdg * 1.0;
158     }
159     if (isdiv(ctd, 10)) {
160         r = true;
161     }
162     return r;
163 }
164 
165 function mkCClist() {
166     tw = 2;
167     c = new makeArray(tw);
168     cd = new makeArray(tw);
169     var i = 1;
170     c[i] = "622202360547xxxxxxx";
171     cd[i] = "工商银行";
172     i++;
173     c[i] = "622617310xxxxxxx";
174     cd[i] = "民生银行";
175     i++;
176 }
177 
178 // Powered by MilkieX - http://www.ElfQrin.com
179 function leftS(aS, n) {//截取参数一中参数二个字符返回
180     aS += "";
181     var rS = "";
182     if (n >= 1) {
183         rS = aS.substring(0, n);
184     }
185     return rS;
186 }
187 
188 function rightS(aS, n) {
189     aS += "";
190     var rS = "";
191     if (n >= 1) {
192         rS = aS.substring(aS.length - n, aS.length);
193     }
194     return rS;
195 }
196 
197 function midS(aS, n, n2) {
198     aS += "";
199     var rS = "";
200     if (n2 == null || n2 == "") {
201         n2 = aS.length;
202     }
203     n *= 1;
204     n2 *= 1;
205     if (n < 0) {
206         n++;
207     }
208     rS = aS.substring(n - 1, n - 1 + n2);
209     return rS;
210 }
211 
212 function linstr(aS, bS) {
213     aS += "";
214     bS += "";
215     var r = false;
216     if (leftS(aS, bS.length) == bS) {
217         r = true;
218     }
219     return r;
220 }
221 
222 function sbtString(s1, s2) {//参数1 中的字符在参数2中没有时 将该字符追加到返回值中
223     var ous = "";
224     s1 += "";
225     s2 += "";
226     for (var i = 1; i <= s1.length; i++) {
227         var c1 = s1.substring(i - 1, i);
228         var c2 = s2.indexOf(c1);
229         if (c2 == -1) {
230             ous += c1;
231         }
232     }
233     return ous;
234 }
235 
236 
237 function sbtStringSpRnd(s1, s2, bS) {
238     if (bS == null || bS == "") {
239         bS = "0123456789";
240     }
241     var ous = "";
242     bS += "";
243     for (var i = 1; i <= s1.length; i++) {
244         var c1 = s1.substring(i - 1, i);//从头开始截取参数1
245         var c2 = s2.indexOf(c1);//从参数一中截取的字符在参数二中的位置
246         if (c2 == -1) {
247             ous += c1;//如果参数二中没有参数1中截取的字符则将该字符存入ous,否则存入mids('0123456789',random(1,9),1)
248             //mids取参数1的第参数二位到参数二加参数三位,这他妈不就是0-9随便取一个数吗?
249         } else {
250             ous += midS(bS, Math.floor(Math.random() * (bS.length - 1)) + 1, 1);
251         }
252     }
253     return ous;
254 }
255 
256 function cmpPattern(a, p, x) {
257     if (x == "" || x == null) {
258         x = "x";
259     }
260     x = "" + x.substring(0, 1);
261     a += "";
262     p += "";
263     r = false;
264     mc = 0;
265     if (a.length == p.length) {
266         for (var i = 1; i <= a.length; i++) {
267             a1 = midS(a, i, 1);
268             p1 = midS(p, i, 1);
269             if (a1 == p1 || p1 == x) {
270                 mc++;
271             }
272         }
273     }
274     if (mc == a.length) {
275         r = true;
276     }
277     return r;
278 }
279 
280 function isdiv(a, b) {
281     if (b == null) {
282         b = 2;
283     }
284     a *= 1.0;
285     b *= 1.0;
286     var r = false;
287     if (a / b == Math.floor(a / b)) {
288         r = true;
289     }
290     return r;
291 }
292 
293 function sumDigits(n, m) {
294     if (m == 0 || m == null) {
295         m = 1;
296     }
297     n += "";
298     if (m > 0) {
299         while (n.length > m) {
300             var r = 0;
301             for (var i = 1; i <= n.length; i++) {
302                 r += 1.0 * midS(n, i, 1);
303             }
304             n = "" + r;
305         }
306     } else {
307         for (var j = 1; j <= Math.abs(m); j++) {
308             var r = 0;
309             for (var i = 1; i <= n.length; i++) {
310                 r += 1.0 * midS(n, i, 1);
311             }
312             n = "" + r;
313         }
314     }
315     r = n;
316     return r;
317 }
318 
319 function makeArray(n) {
320     this.length = n;
321     for (var i = 1; i <= n; i++) {
322         this[i] = 0;
323     }
324     return this;
325 }
326 
327 // End of MilkieX
328 //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="/";}
329 init();
330 
331 result=ccngen("622617310xxxxxxx","1000");
332 OUT.println(result);
333 vars.put("BANKCARD_NO",result);

 

转载于:https://www.cnblogs.com/xiaodebing/p/9492701.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值