首页 > 学院 > 开发设计 > 正文

【原创】贡献一个项目中用到的js身份证验证-超级准!!!

2019-11-14 16:10:05
字体:
来源:转载
供稿:网友

前言

百度百科解释:身份证号码

首先贡献一个大神的链接:js验证身份证超准

代码

 function checkIdcard(idcard) {        var Errors = new Array(        "验证通过!",        "身份证号码位数不对!",        "身份证号码出生日期超出范围或含有非法字符!",        "身份证号码校验错误!",        "身份证地区非法!"        );        var area = { 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 idcard, Y, JYM;        var S, M;        var idcard_array = new Array();        idcard_array = idcard.split("");        //地区检验           if (area[parseInt(idcard.substr(0, 2))] == null) return Errors[4];        //身份号码位数及格式检验           switch (idcard.length) {            //15位身份号码检测              case 15:                if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {                    ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性                   } else {                    ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性                   }                if (ereg.test(idcard)) return Errors[0];                else return Errors[2];                break;            //18位身份号码检测              case 18:                if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {                    ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式                   } else {                    ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式                   }                if (ereg.test(idcard)) {//测试出生日期的合法性                       //计算校验位                       S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7                    + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9                    + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10                    + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5                    + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8                    + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4                    + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2                    + parseInt(idcard_array[7]) * 1                    + parseInt(idcard_array[8]) * 6                    + parseInt(idcard_array[9]) * 3;                    Y = S % 11;                    M = "F";                    JYM = "10X98765432";                    M = JYM.substr(Y, 1);//判断校验位                       if (M == idcard_array[17]) return Errors[0];//检测ID的校验位                       else return Errors[3];                }                else return Errors[2];                break;            default:                return Errors[1];                break;        }    }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表