用js完成身份证校验[定稿]
用JS实现身份证校验
<------------------js检验身份证是否合法
--------------------->
function
checkPersonIdandgetValue(control,ad_birthday,as_sex,empty){
control.value = Trim(control.value);
var year;
var month;
var day;
var ls_tmp;
if( empty == "0" && (control.value ==
""||control.value.length == 0)){
return true;
}
if (empty == "1")
{
if (control.value ==
""||control.value.length == 0)
{
control.select();
alert("身份证号码录入的数据不能为空" );
return false;
}
}
if (control.value !="")
{
if (control.value.length==15)
{
year = "19"+control.value.substr(6,2);
month= control.value.substr(8,2);
day = control.value.substr(10,2);
if (!isDateNumberFormat(month,day,year))
//检验身份证号码中的出生日期部分是否为合法日期
{
alert("身份证号码日期部分错误~
"+year+"-"+month+"-"+day);
control.select();
return false;
}
ls_tmp = year+"-"+month+"-"+day;
ad_birthday.value=ls_tmp;
if (control.value.substr(14,1)%2==1) //身份证号
码的最后一位是否为奇数
as_sex.value="1";
if (control.value.substr(14,1)%2==0)
as_sex.value="2";
return true;
}
if (control.value.length==18)
{
var ls_sfz;
var ls_sign="";
var ls_calculatesign;
var li_valid;
var li_count;
var li_charp;
var li_result;
ls_sfz = control.value;
ls_sign = ls_sfz.substr(17,1);
ls_sfz = ls_sfz.substr(0,17);
year = control.value.substr(6,4);
month= control.value.substr(10,2);
day = control.value.substr(12,2);
if (!isDateNumberFormat(month,day,year))
{
alert("输入的身份证出生年月不合法!!!");
control.focus();
return false;
}
li_valid = 0;
for (li_count=17;li_count>=1;li_count--)
{
if (isNaN(parseInt(ls_sfz.substr(li_count-1,1))))
{
alert("输入的身份证中有不合法的字符!");
control.select();
return false;
}
li_valid=li_valid+(Math.pow(2,li_count)%11)*ls_sfz.substr(1
7-li_count,1);
}
li_charp = li_valid%11;
if(li_charp==0)
ls_calculatesign = "1";
if(li_charp==1)
ls_calculatesign = "0";
if(li_charp==2)
ls_calculatesign = "X";
if(li_charp==3)
ls_calculatesign = "9";
if(li_charp==4)
ls_calculatesign = "8";
if(li_charp==5)
ls_calculatesign = "7";
if(li_charp==6)
ls_calculatesign = "6";
if(li_charp==7)
ls_calculatesign = "5";
if(li_charp==8)
ls_calculatesign = "4";
if(li_charp==9)
ls_calculatesign = "3";
if(li_charp==10)
ls_calculatesign = "2";
if (ls_sign.length == 1 && ls_sign !=
ls_calculatesign)
{
alert("输入的身份证校验位不合法!!!");
control.select();
return false;
}
ls_tmp =
control.value.substr(6,4)+"-"+control.value.substr(10,2)+"-
"+control.value.substr(12,2);
ad_birthday.value=ls_tmp;
if (control.value.substr(16,1)%2==1)
as_sex.value="1";
if (control.value.substr(16,1)%2==0)
as_sex.value="2";
return true;
}
else
{
alert("身份证号码长度错误~");
control.select();
return false;
}
}
return true;
}