前端之家收集整理的这篇文章主要介绍了
大陆身份证号码正则验证js脚本,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是我的验证出生日期1940-2015大陆身份证号的js脚本,对 18 位身份证号有校验码的验证,但15位的只是做了基础性的位数和出生年月日的验证。如果谁能理出前六位的列表就更好了,如果有什么更好的方
法请提出来,大家一块探讨一下。
String.prototype.isCardId = function() {
var v = this;
if(v.length!=18&&v.length!=15){
return false;
}
var reg = /^\d{6}((?:19)?[4-9][0-9]|20(?:0[0-9]|1[0-5]))((?:0[1-9]|1[012])(?:0[1-9]|[12][0-9])|(?:0[13578]|1[02])(?:3[01])|(?:0[469]|11)(?:30))[0-9]{2,3}[0-9xX]?$/ ;
var b = reg.test(v);
if(!b){
return false;
}
var y = RegExp.$1;
var md = RegExp.$2;
console.info(y+"-"+md);
if("0229"==md.trim()){
y = parseInt(y,10);
if(y<1900){
y +=1900;
}
if(y%400!=0&&y%4!=0){
return false;
}
}
if (v.length == 18) {
var byNum = [7,9,10,5,8,4,2,1,6,3,7,2];
var lastNum = [1,'X',2];
var cardArray = v.split("");
var sum = 0;
for (var i = 0; i < byNum.length; i++) {
sum += byNum[i] * cardArray[i];
}
if (lastNum[sum % 11] != (""+cardArray[17]).toUpperCase()) {
return false;
}
}
return true;
}