身份证验证JS版
/** *代码参考来自:http://www.oschina.net/code/snippet_778481_21907 *只验证身份证是否正确,未加上判断性别 *@param num 身份证号码 *@return boolean true|false *使用,var bools = checkIdentity.validate(num); */ var checkIdentity = { validate:function(num) { var areaNum = dateNum = sexNum = endNum = 0; if(num == "" || num== null || num == undefined) { return false; } // 不是15位或不是18位都是无效身份证号 if(num.length != 15 && num.length != 18){ return false; } // 是数值 if(!isNaN(num)){ // 如果是15位身份证号 if(num.length == 15 ){ // 省市县(3位) areaNum = num.substring(0,3); // 出生年月(6位) dateNum = num.substring(6,12); // 性别(3位) sexNum = num.substring(12,15); }else{ // 如果是18位身份证号 // 省市县(6位) areaNum = num.substring(0,6); // 出生年月(8位) dateNum = num.substring(6,14); // 性别(3位) sexNum = num.substring(14,17); // 校验码(1位) endNum = num.substring(17,18); } }else{ // 不是数值 if(num.length == 15){ return false; }else{ // 验证前17位为数值,且18位为字符x var check17 = num.substring(0,17); if(isNaN(check17)){ return false; } // 省市县(6位) areaNum = num.substring(0,6); // 出生年月(8位) dateNum = num.substring(6,14); // 性别(3位) sexNum = num.substring(14,17); // 校验码(1位) endNum = num.substring(17,18); if(endNum != ‘x‘ && endNum != ‘X‘){ return false; } } } if(areaNum != 0){ if(!this._checkArea(areaNum)){ return false; } } if(dateNum != 0){ if(!this._checkDate(dateNum)){ return false; } } if(endNum != 0){ if(!this._checkEnd(endNum,num)){ return false; } } return true; }, _checkArea:function(area) { var num1 = area.substring(0,2); // var num2 = area.substring(2,2); // var num3 = area.substring(4,2); // 根据GB/T2260—999,省市代码11到65 if(10 < num1 && num1 < 66){ return true; }else{ return false; } //============ // 对市 区进行验证 //============ }, _checkDate:function(date) { var statusY = date1 = date2 = date3=""; if(date.length == 6){ date1 = date.substring(0,2); date2 = date.substring(2,4); date3 = date.substring(4,6); statusY = this._checkY(‘19‘+date1); }else{ var nowDate = new Date(); date1 = date.substring(0,4); date2 = date.substring(4,6); date3 = date.substring(6,8); var nowY = nowDate.getFullYear(); if(1900 < date1 && date1 <= nowY){ statusY = this._checkY(date1); }else{ return false; } } if(0 < date2 && date2 <13){ if(date2 == 2){ // 润年 if(statusY){ if(0 < date3 && date3 <= 29){ return true; }else{ return false; } }else{ // 平年 if(0 < date3 && date3 <= 28){ return true; }else{ return false; } } }else{ var maxDateNum = this._getDateNum(statusY,date2); if(0 < date3 && date3 <= maxDateNum){ return true; }else{ return false; } } }else{ return false; } }, _checkY:function(Y){ // 验证平年润年,参数年份,返回 true为润年 false为平年 if(typeof Y == ‘string‘){ Y = parseInt(Y); } if(Y % 100 == 0){ if(Y % 400 == 0){ return true; }else{ return false; } }else if(Y % 4 == 0){ return true; }else{ return false; } }, _getDateNum:function($year,$month) { var days = new Date($year,$month,0).getDate(); return days; }, _checkEnd:function(end,num){ var checkHou = new Array(1,0,‘x‘,9,8,7,6,5,4,3,2); var checkGu = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); var sum = 0; var numArr = new Array(); for(var j = 0;j < num.length;j++) { var tmpJ = j+1; numArr[j] = num.substring(j,tmpJ); } for(var i = 0;i < 17;i++){ sum += parseInt(checkGu[i]) * parseInt(numArr[i]); } var checkHouParameter= sum % 11; if(checkHou[checkHouParameter] != num.substring(17,18)){ return false; }else{ return true; } } }
这是自己将PHP代码转成Javascript,由于时间比较赶,未进行很多测试,如发现不对的地方,还请你能指出,告诉我,非常感谢.
我的联系邮箱是:[email protected]
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。