首页 > 代码库 > 最严格的身份证校验(JavaScript版)
最严格的身份证校验(JavaScript版)
在JavaWeb研发过程中为了获取有效的用户信息,校验其数据的有效性非常是必要,以下贴出在项目中用到的关于身份证的校验:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<title>身份证校验</title>
<script type="text/javascript" src=http://www.mamicode.com/"./jquery-1.6.2.js"></script>
<script type="text/javascript">
function checkCertificateNo(){
var certificateNo = $("#certificateNo").val();//身份证号码
if(certificateNo.length != 18){
alert("身份证号码无效,请使用第二代身份证!!!");
}else{
var address = certificateNo.substring(0,6);//6位,地区代码
var birthday = certificateNo.substring(6,14);//8位,出生日期
var sequenceCode = certificateNo.substring(14,17);//3位,顺序码:奇为男,偶为女
var checkCode = certificateNo.substring(17);//1位,校验码:检验位
console.log("身份证号码:"+certificateNo+"、地区代码:"+address+"、出生日期:"+birthday+"、顺序码:"+sequenceCode+"、校验码:"+checkCode);
var province={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 year = birthday.substring(0,4);
var month = birthday.substring(4,6);
var day = birthday.substring(6);
var tempDate = new Date(year,parseFloat(month)-1,parseFloat(day));
if(province[parseInt(address.substr(0,2))] == null || (tempDate.getFullYear()!=parseFloat(year) || tempDate.getMonth()!=parseFloat(month)-1 || tempDate.getDate()!=parseFloat(day))){//这里用getFullYear()获取年份,避免千年虫问题
alert("身份证号码无效,请又一次输入!!!");
}else{
var weightedFactors = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];//加权因子
var valideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值,当中10代表X
var certificateNoArray =certificateNo.split("");// 得到身份证数组
var sum = 0;// 声明加权求和变量
if (certificateNoArray[17].toLowerCase() == ‘x‘) {
certificateNoArray[17] = 10;// 将最后位为x的验证码替换为10
}
for ( var i = 0; i < 17; i++) {
sum += weightedFactors[i] * certificateNoArray[i];// 加权求和
}
valCodePosition = sum % 11;// 得到验证码所在位置
if (certificateNoArray[17] == valideCode[valCodePosition]) {
var sex = "男";
if(sequenceCode%2==0){
sex = "女";
}
alert("身份证号码有效,性别为:"+sex+"!");
} else {
alert("身份证号码无效,请又一次输入!!!");
}
}
}
}
</script>
</head>
<body>
<input id = "certificateNo" name = "certificateNo" value = http://www.mamicode.com/"61072919761109762X"/> <input type="button" onclick="checkCertificateNo();" value = http://www.mamicode.com/"開始校验"/>
</body>
</html>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。