博客
-
javascript实现银行卡号的Luhn验证或校验算法
函数描述:luhn校验规则:16位银行卡号(19位通用):
1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。
2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字。
3.将加法和加上校验位能被 10 整除。源代码
function checkbankno(bankno) {
var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(与luhm进行比较)var first15Num=bankno.substr(0,bankno.length-1);//前15或18位
var newArr=new Array();
for(var i=first15Num.length-1;i>-1;i–){
//前15或18位倒序存进数组
newArr.push(first15Num.substr(i,1));}
var arrJiShu=new Array(); //奇数位*2的积 <9
var arrJiShu2=new Array(); //奇数位*2的积 >9var arrOuShu=new Array(); //偶数位数组
for(var j=0;j<newArr.length;j++){if((j+1)%2==1){
//奇数位
if(parseInt(newArr[j])*2<9)
arrJiShu.push(parseInt(newArr[j])*2);
else
arrJiShu2.push(parseInt(newArr[j])*2);}
else //偶数位
arrOuShu.push(newArr[j]);}
var jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数
var jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数
for(var h=0;h<arrJiShu2.length;h++){jishu_child1.push(parseInt(arrJiShu2[h])%10);
jishu_child2.push(parseInt(arrJiShu2[h])/10);}
var sumJiShu=0; //奇数位*2 < 9 的数组之和
var sumOuShu=0; //偶数位数组之和
var sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
var sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
var sumTotal=0;
for(var m=0;m<arrJiShu.length;m++){
sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
}for(var n=0;n<arrOuShu.length;n++){
sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
}
for(var p=0;p<jishu_child1.length;p++){
sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);}
//计算总和
sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2);//计算Luhm值
var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;
var luhm= 10-k;if(lastNum==luhm){
$("#banknoInfo").html("Luhm验证通过");
return true;}
else{$("#banknoInfo").html("银行卡号必须符合Luhm校验");
return false;}
}; -
JavaScript禁止Alert弹出框 | 暴力禁止
文章介绍:JavaScript的Alert弹出框失效的方法,也就是禁止让JS弹出警告框通过以下代码可将Js弹出框屏蔽掉。
源代码
<script LANGUAGE="JavaScript">
window.alert = function(str){
return ;
}
alert("不能弹出警示框");
</script>
实现思路是对“alert”方法重写
重写的语法为:“旧方法=function(参数){新方法的内容}”。
返回值要为“false”,表示不执行任何操作。
-
js 精确校验身份证号码|地址编码|出生日期|校验位验证|优化10月份身份校验
划重点:校验身份证的代码虽然很多平台有发布,但是估计只有10月份的开发者,才能一把测试出Bug。因为网上有的代码,正则校验规则忽略了10月份。//身份证号合法性验证 //支持地址编码、出生日期、校验位验证 function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "}; var tip = ""; var pass= true; //验证身份证格式(6个地区编码,8位出生日期,3位顺序号,1位校验位) if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){ tip = "身份证号格式错误"; pass = false; } else if(!city[code.substr(0,2)]){ tip = "地址编码错误"; pass = false; } else{ //18位身份证需要验证最后一位校验位 if(code.length == 18){ code = code.split(''); //∑(ai×Wi)(mod 11) //加权因子 var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; //校验位 var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]; var sum = 0; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } var last = parity[sum % 11]; if(parity[sum % 11] != code[17]){ tip = "校验位错误"; pass =false; } } } if(!pass) alert(tip); return pass; }附:
1.中华人民共和国第二代身份号码标准(GB11643-1999)
-
身份证号的每位数字的意义
身份证上面的数字就是身份证号码:
身份证号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码、八位数字出生日期码、三位数字顺序码和一位数字校验码。
地址码(前六位数):表示身份证编码对象常住户口所在省份、地市,以及县(市、旗、区)的行政区划代码,按照GB/T2260的规定执行。其中:前1、2位数字表示所在省份的代码; 第3、4位数字表示所在地市的代码; 第5、6位数字表示:所在县(市、旗、区)的代码。
出生日期码(第七位至十四位):表示身份证编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
顺序码(第十五位至十七位):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验码(第十八位数):作为尾号的校验码,是由身份证号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现Ⅹ,但如果尾号是10,那么就得用Ⅹ来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用Ⅹ来代替10,可以保证公民的身份证符合国家标准。
-
thinkcmf5 后台搜索分页保持分页条件
$where = array(); $keyword = ""; $data = $this->request->param(); if(!empty($data['keyword'])){ $where['username|email|first_name|type|last_name|country|city'] = array('like','%'.$data['keyword'].'%'); $keyword = $data['keyword']; } $resData = Db::name('subscription')->where($where)->order('createtime desc')->paginate(10); $this->assign('resData',$resData); $this->assign('keyword',$keyword); $resData->appends($data);// 在 render 前,使用appends方法保持分页条件 $this->assign('page',$resData->render());//单独提取分页出来 // 渲染模板输出 return $this->fetch();