var validateIdCard=function (id, backInfo) {
var info={
y: "1900",
m: "01",
d: "01",
sex: "male",
valid: false,
length: 0
},
initDate=function (length) {
info.length=length;
var a=length===15?0:2, // 15:18
temp;
info.y=(a?"":"19")+id.substring(6,8+a);
info.m=id.substring(8+a,10+a);
info.d=id.substring(10+a,12+a);
info.sex=id.substring(14, 15+a)%2===0?"female":"male";
temp=new Date(info.y, info.m-1, info.d);
return (temp.getFullYear()==info.y*1)
&& (temp.getMonth()+1==info.m*1)
&& (temp.getDate()==info.d*1);
},
back=function () {
return backInfo?info:info.valid;
};
if(typeof id !== "string") return back();
// 18
if(/^\d{17}[0-9x]$/i.test(id)){
if(!initDate(18)) return back();
id=id.toLowerCase().split("");
var wi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],
y="10x98765432".split(""),
sum=0;
for (var i = 0; i<17; i++) sum+=wi[i]*id[i];
if(y[sum%11]===id.pop().toLowerCase()) info.valid=true;
return back();
}
// 15
else if(/^\d{15}$/.test(id)){
if(initDate(15)) info.valid=true;
return back();
}
else{
return back();
}
};
用的时候只需要调用
validateIdCard(IdCard)== true/false //true是默认的可以不写