原版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 + "\n";
out += "CCChecksum : " + ccckt + "\n";
out += "Luhn Check Digit: " + clcdt + "\n";
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:\n" + 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;
}
}
原版js生成银行卡号的更多相关文章
- 利用scrapy-splash爬取JS生成的动态页面
目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...
- JS生成二维码,允许中文转码
一.使用jquery-qrcode生成二维码 先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcod ...
- js生成随即字符串
js生成随即字符串 /* *js生成随即字符串原来如此简单 *toString() radix argument must be between 2 and 36 */ function uuid() ...
- js生成[n,m]的随机数
一.预备知识 Math.ceil(); //向上取整. Math.floor(); //向下取整. Math.round(); //四舍五入. Math.random(); //0.0 ~ 1 ...
- JS生成随机数的各种函数
第一种方法 /* *@desc:生成随机字符串 *@remark:toString方法可以接收一个基数作为参数的原理,这个基数从2到36封顶.如果不指定,默认基数是10进制 */ function g ...
- js生成当前时间
js生成当前时间 var today=new Date(); function itArray(){ this.length=itArray.arguments.length for(var i=0; ...
- js 生成 yyyy-mm-dd 格式的逼格姿势
关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...
- js生成有缩进的表格
项目中用到用了两天时间想到的,记录下来,如有更好的方法,留言给我,谢谢! js做如下表格: json [{"id":302,"serviceId":15,&qu ...
- 前端学习-使用JS库Leaflet.js生成世界地图并获取标注地址经纬度。
介绍:Leaflet是一个开源的JavaScript库,对移动端友好且对地图有很好的交互性. 大小仅仅只有 33 KB, 同时具有大多数地图所需要的特点. Leaflet设计的非常简单易懂, 同时具有 ...
随机推荐
- NIKKEI Programming Contest 2019 翻车记
A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> ...
- Sum of Consecutive Prime Numbers POJ - 2739 线性欧拉筛(线性欧拉筛证明)
题意:给一个数 可以写出多少种 连续素数的合 思路:直接线性筛 筛素数 暴力找就行 (素数到n/2就可以停下了,优化一个常数) 其中:线性筛的证明参考:https://blog.csdn.net ...
- 【hdu 4658】Integer Partition (无序分拆数、五边形数定理)
hdu 4658 Integer Partition 题意 n分拆成若干个正整数的和,每个正整数出现小于k次,分拆方案有多少.(t<=100,n<=1e5) 题解 之前写过一篇Partit ...
- 「UVA10766」Organising the Organisation(生成树计数)
BUPT 2017 Summer Training (for 16) #6C 题意 n个点,完全图减去m条边,求生成树个数. 题解 注意可能会给重边. 然后就是生成树计数了. 代码 #include ...
- BZOJ2961 共点圆[CDQ分治]
题面 bzoj 其实就是推一下圆的式子 长成这个样子 假设要查询的点是(x, y) 某个圆心是(p, q) \((x - p)^2 + (y - q)^2 \leq p^2 + q^2\) 变成 \( ...
- maven手动安装jar包到本地仓库,以ojdbc6为例
在做mybatis generator的中文注释实现时,感觉每次都要在配置文件中指定ojdbc6的位置太麻烦了,别人用也不方便,没有的还得自己去下,所以就想直接把ojdbc6打包到项目里,这样拿到就可 ...
- 【SPOJ】Power Modulo Inverted(拓展BSGS)
[SPOJ]Power Modulo Inverted(拓展BSGS) 题面 洛谷 求最小的\(y\) 满足 \[k\equiv x^y(mod\ z)\] 题解 拓展\(BSGS\)模板题 #inc ...
- 【BZOJ5324】[JXOI2018]守卫(动态规划)
[BZOJ5324][JXOI2018]守卫(动态规划) 题面 BZOJ 洛谷 题解 既然只能看到横坐标在左侧的点,那么对于任意一个区间\([l,r]\)而言,\(r\)必须被选. 假设\(r\)看不 ...
- 「SCOI2016」背单词 解题报告
「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...
- suoi62 网友跳 (暴搜+dp)
传送门 sbw太神啦orz 首先N<=20可以直接暴搜 然后玄学剪枝可以过18个点 那么N<=40的时候,就把它拆成两半分别暴搜,再用dp拼起来 对于前半段,设f[i][j]是开始高度为i ...