银行卡、身份证JavaScript校验

目录


 

一、身份证

 

//身份证号合法性验证
//支持15位和18位身份证号
//支持地址编码、出生日期、校验位验证
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;

    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;
            }
        }
    }
    return pass;
}

二、银行卡luhm规则校验

//Luhm校验规则:16位银行卡号(19位通用):

// 1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。
// 2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字。
// 3.将加法和加上校验位能被 10 整除。
//bankno为银行卡号 banknoInfo为显示提示信息的DIV或其他控件
function luhmCheck(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 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); } 偶数位 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])); jishu_child2.push(parseint(arrjishu2[h]) 0); } var sumjishu="0;" 奇数位*2 < 9 的数组之和 sumoushu="0;" 偶数位数组之和 sumjishuchild1="0;">
    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]);" 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)==0?10:parseInt(sumTotal);" luhm="10-k;" if(lastnum="=luhm){" $("#banknoinfo").html("luhm验证通过"); return true; else{ $("#banknoinfo").html("银行卡号必须符合luhm校验"); false; < ode>
   
  

前一篇:iPhone手机上使用jQuery的die、live和on注册click事件无法点击
后一篇:Java利用DES/3DES/AES三种算法分别实现对称加密

belonk

轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩