六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 117|回复: 0

新旧身份证合法性验证及相互转换算法(二):JavaScript身份证号码验证-支持新的带x身份证

[复制链接]

升级  10.67%

18

主题

18

主题

18

主题

秀才

Rank: 2

积分
66
 楼主| 发表于 2013-2-7 20:08:54 | 显示全部楼层 |阅读模式
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>身份证号码验证-支持新的带x身份证</title><script language="javascript">//身份证号码验证-支持新的带x身份证//function check_ID_card() {var ID_card = document.all('idcard').value;var IDcardLen = ID_card.length;  var fMod = 11;           //身份证算法求模关键值var oldIDLen = 15;  //旧身份证长度  var newIDLen = 18;   //新身份证长度var yearFlag = "19";  //新身份证年份标志   var Wi = new Array();       //位权值数组var varArray = new Array();var birthday = ''; //生日var checkDigit = ''; //校验位var numSum = 0; //数字和var regStr = /^\d{15,17}([\dxX]{1})?$/;if ((IDcardLen != 15) && (IDcardLen != 18)) {alert("身份证长度必须为15或18位.");return false;}if(!regStr.test(ID_card)){alert("身份证号码必须为数字(18位的新身份证最后一位可以是x).");return false;}if(IDcardLen == 15){birthday = "19" + ID_card.substring(6,8) + "-" + ID_card.substring(8,10) + "-" + ID_card.substring(10,12);}else{birthday = ID_card.substring(6,10) + "-" + ID_card.substring(10,12) + "-" + ID_card.substring(12,14);}if(!isDate(birthday)){alert("身份证号码中的日期格式不对(第6-12位).");return false;}if(IDcardLen == 18){for(var i=0;i<newIDLen-1;i++){     var k = Math.pow(2,newIDLen-1-i); Wi[i] = k % 11; } for(var i=0;i<IDcardLen-1;i++){varArray[i] = ID_card.charAt(i);varArray[i] = varArray[i]*Wi[i];numSum = numSum + varArray[i];}checkDigit = 12 - numSum % 11;        switch (checkDigit) {            case 10:                checkDigit = 'X';                break;            case 11:                checkDigit = 0;                break;            case 12:                checkDigit = 1;                break;         }         // check last digit         if (ID_card.charAt(17).toUpperCase() != checkDigit) {             alert("身份证最后一位校验码不对,应该为"+checkDigit+".");             return false;         }}alert(ID_card+"为正确的身份证号码.");return true;}//日期格式验证(yyyy-mm-dd,其中月,日可以只有一位)//function isDate(dateStr){var B, D=0;// Split into $1 $2 $3B = /^(\d{4})-(\d|\d\d)-(\d|\d\d)$/.test(dateStr); if (B) with (RegExp){    // $1 $2 $3 = Y M D    D = new Date($1, $2-1, $3);     // test Y M D valid        B = ((D.getMonth()==$2-1) && (D.getFullYear()==$1)); }return B;}</script></head><body><form name='frm' ><center>身份证号码:<input type='text' name='idcard' value="">                        <input type=submit value='验证'></center></form></body></html>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表