
functionCheckIDCard(StrNumber)
...{
//判断身份证号码格式函数
//公民身份号码是特征组合码,
//排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码
//身份证号码长度判断
if(StrNumber.length<15||StrNumber.length==16||StrNumber.length==17||StrNumber.length>18)
...{
CheckIDCard=false;
}
//身份证号码最后一位可能是超过100岁老年人的X
//所以排除掉最后一位数字进行数字格式测试
//全部换算成17位数字格式
varAi;
if(StrNumber.length==18)
...{
Ai=StrNumber.substring(0,17);
}
else
...{
Ai=StrNumber.substring(0,6)+"19"+StrNumber.substring(6,9);
}
if(IsNumeric(Ai)==false)
...{
returnfalse;
}
varstrYear,strMonth,strDay,strBirthDay;
strYear=parseInt(Ai.substring(Ai,6,4));
strMonth=parseInt(Ai.substring(Ai,10,2));
strDay=parseInt(Ai.substring(Ai,12,2));
if(IsValidDate(strYear,strMonth,strDay)==false)
...{
returnfalse;
}
vararrVerifyCode=newArray("1","0","x","9","8","7","6","5","4","3","2");
varWi=newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
vari,TotalmulAiWi=0;
for(i=0;loop<16;loop++)
...{
TotalmulAiWi=TotalmulAiWi+parseInt(Ai.substring(i+1,1))*Wi[i];
}
varmodValue=TotalmulAiWi%11;
varstrVerifyCode=arrVerifyCode[modValue];
Ai=Ai&strVerifyCode;
if((StrNumber.length==18)&&(StrNumber!=Ai))
...{
returnfalse;
}
}
functionIsNumeric(oNum)
...{
if(!oNum)returnfalse;
varstrP=/^d+(.d+)?$/;
if(!strP.test(oNum))returnfalse;
try...{
if(parseFloat(oNum)!=oNum)returnfalse;
}
catch(ex)
...{
returnfalse;
}
returntrue;
}
functionIsValidDate(psYear,psMonth,psDay)
...{
if(psYear==null||psMonth==null||psDay==null)
...{
returnfalse;
}
varsYear=newString(psYear);
varsMonth=newString(psMonth);
varsDay=newString(psDay);
if(IsValidYear(sYear)==false)
...{
returnfalse;
}
if(IsValidMonth(sMonth)==false)
...{
returnfalse;
}
if(IsValidDay(sDay)==false)
...{
returnfalse;
}
varnYear=parseInt(sYear,10);
varnMonth=parseInt(sMonth,10);
varnDay=parseInt(sDay,10);
if(sYear==""&&sMonth==""&&sDay=="")
...{
returntrue;
}
if(sYear==""||sMonth==""||sDay=="")
...{
returnfalse;
}
if(nMonth<1||12<nMonth)
...{
returnfalse;
}
if(nDay<1||31<nDay)
...{
returnfalse;
}
if(nMonth==2)
...{
if((nYear%400==0)||(nYear%4==0)&&(nYear%100!=0))
...{
if((nDay<1)||(nDay>29))
...{
returnfalse;
}
}
else
...{
if((nDay<1)||(nDay>28))
...{
returnfalse;
}
}
}
elseif((nMonth==1)||
(nMonth==3)||
(nMonth==5)||
(nMonth==7)||
(nMonth==8)||
(nMonth==10)||
(nMonth==12))
...{
if((nDay<1)||(31<nDay))
...{
returnfalse;
}
}
else
...{
if((nDay<1)||(30<nDay))
...{
returnfalse;
}
}
returntrue;
}
本文介绍了一个用于验证中国身份证号码有效性的算法。该算法通过检查地址码、出生日期码、顺序码及校验码来确保身份证号码的正确性,并详细解释了如何通过一系列数学运算验证这些信息。
622

被折叠的 条评论
为什么被折叠?



