检查身份证号码是否正确的函数
<SCRIPT LANGUAGE="JavaScript">
function isIdCardNo(num)
{
if (isNaN(num)) {alert("输入的不是数字!"); return false;}
var len = num.length, re;
if (len == 15)
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
else {alert("输入的数字位数不对!"); return false;}
var a = num.match(re);
if (a != null)
{
if (len==15)
{
var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
else
{
var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
if (!B) {alert("输入的身份证号 "+ a[0] +" 里出生日期不对!"); return false;}
}
return true;
}
isIdCardNo("330103780133103");
isIdCardNo("330103780123103");
isIdCardNo("330103197801231030");
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
function isIdCardNo(num)
{
if (isNaN(num)) {alert("输入的不是数字!"); return false;}
var len = num.length, re;
if (len == 15)
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
else {alert("输入的数字位数不对!"); return false;}
var a = num.match(re);
if (a != null)
{
if (len==15)
{
var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
else
{
var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
if (!B) {alert("输入的身份证号 "+ a[0] +" 里出生日期不对!"); return false;}
}
return true;
}
isIdCardNo("330103780133103");
isIdCardNo("330103780123103");
isIdCardNo("330103197801231030");
</SCRIPT>
<!--
String.prototype.isIDCard = function()
{
var iSum=0;
var info="";
var sId = this;
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
if(!/^\d{17}(\d|x)$/i.test(sId))
{
return false;
}
sId=sId.replace(/x$/i,"a");
//非法地区
if(aCity[parseInt(sId.substr(0,2))]==null)
{
return false;
}
var sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/"))
//非法生日
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))
{
return false;
}
for(var i = 17;i>=0;i--)
{
iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11);
}
if(iSum%11!=1)
{
return false;
}
return true;
} alert("2345454564564".isIDCard());
//-->
</SCRIPT>//18位的
<HEAD>
<TITLE> New Document </TITLE>
<META Http-Equiv="Content-Type" Content="text/html; charset=gb2312">
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function isNoNull(str){
if(Trim(str)=="") return false;
return true;
}
function Trim(str){
var i,strlength,t,chartemp,returnstr;
str=CStr(str);
strlength=str.length;
t=str; for(i=0;i<strlength;i++){
chartemp=str.substring(i,i+1);
if(chartemp==" "){
t=str.substring(i+1,strlength);
}
else{
break;
}
}
returnstr=t;
strlength=t.length;
for(i=strlength;i>=0;i--){
chartemp=t.substring(i,i-1);
if(chartemp==" "){
returnstr=t.substring(i-1,0);
}
else{
break;
}
}
return (returnstr);
}function CStr(inp){
return(""+inp+"");
}function IsInt(str){
var i,strlength,tempchar; str=CStr(str);
if(str=="") return false;
strlength=str.length;
for(i=0;i<strlength;i++){
tempchar=str.substring(i,i+1);
if(!(tempchar==0||tempchar==1||tempchar==2||tempchar==3||tempchar==4||tempchar==5||tempchar==6||tempchar==7||tempchar==8||tempchar==9)){
return false;
}
}
return true;
}function IsDate(datestr){
var tmpy="";
var tmpm="";
var tmpd="";
var status=0;
var lthdatestr= datestr.length;
//分割输入的字符串
for (i=0;i<lthdatestr;i++){
if (datestr.charAt(i)== '-'){
status++;
}
if (status>2) return false;
if ((status==0) && (datestr.charAt(i)!='-')){
tmpy=tmpy+datestr.charAt(i)
}
if ((status==1) && (datestr.charAt(i)!='-')){
tmpm=tmpm+datestr.charAt(i)
}
if ((status==2) && (datestr.charAt(i)!='-')){
tmpd=tmpd+datestr.charAt(i)
}
if ((datestr.charAt(i)!='-') && (IsInt(datestr.charAt(i))==false))
{
return false;
}
}
if ((tmpy.length!=4)||(tmpm.length>2)||(tmpd.length>2)) return false;
var intYear=tmpy
var intMonth=tmpm
var intDay=tmpd //过滤错误的日期
if (!((intMonth>0)&&(intMonth<13)&&(intDay<32)&&(intDay>0))) return false;
if (!((intYear % 4)==0) && (intDay==2)&&(intDay==29)) return false;
if ((intMonth<=7)&&((intMonth % 2)==0)&&(intDay>30)) return false;
if ((intMonth>=8)&&((intMonth % 2)==1)&&(intDay>30)) return false;
if ((intMonth==2)&&(intDay>29)) return false; return true;
}function checkSfz(){
objID=document.frm1.txtDangAn_identity;
if(isNoNull(objID.value)==false){
alert("请输入身份证号码");
objID.focus();
objID.select();
return false;
}
if(objID.value!=""){
if(objID.value.length!=15 && objID.value.length!=18){
alert("请输入正确的身份证位数(15或18位)!");
objID.focus();
objID.select();
return false;
}
if(escape(objID.value).indexOf("%u")!=-1){
alert("请输入正确的身份证号码(数字或英文半角字符)!");
objID.focus();
objID.select();
return false;
}
intStrLen=objID.value.length;
strVal=document.frm1.txtDangAn_identity.value;
for(i=0;i<intStrLen;i++){
if(!((strVal.charAt(i)>="A" && strVal.charAt(i)<="Z") || (strVal.charAt(i)>="a" && strVal.charAt(i)<="z") || (strVal.charAt(i)>="0" && strVal.charAt(i)<="9"))){
alert("请输入正确的身份证号码(数字或英文半角字符)!");
objID.focus();
objID.select();
return false;
}
}
}
var strsr;
var sfz=objID.value;
if(intStrLen==15){//为15为身份证
strsr="19"+sfz.substring(6,8)+"-"+sfz.substring(8,10)+"-"+sfz.substring(10,12);//strsr为生日
alert(strsr);
if(IsDate(strsr)==false){
alert("您身份证号码填写有误,请自检!");
document.frm1.txtDangAn_identity.focus();
return false;
} } else if(intStrLen==18){//为18为身份证
strsr=sfz.substring(6,10)+"-"+sfz.substring(10,12)+"-"+sfz.substring(12,14);//strsr为生日 if(IsDate(strsr)==false){
alert("您身份证号码填写有误,请自检!");
document.frm1.txtDangAn_identity.focus();
return false;
}
d = new Date();
if(parseInt(sfz.substring(6,10))<1900 || parseInt(sfz.substring(6,10))>d.getYear()){
alert("您身份证号码填写有误,请自检!");
document.all.frm1.txtDangAn_identity.focus();
document.all.frm1.txtDangAn_identity.select();
return false;
}
}
return true;
}//-->
</SCRIPT>
<BODY>
<FORM METHOD=POST ACTION="" name="frm1">
<INPUT TYPE="text" NAME="txtDangAn_identity" maxlength="18">
<INPUT TYPE="button" onclick="checkSfz()" value="检验">
</FORM>
</BODY>
</HTML>
{
if (!s) return false;
d = new Date(d);
if (!d.getTime()) return false;
var t, r;
t = "" + d.getFullYear() + dblNum(d.getMonth() + 1) + dblNum(d.getDate());
if (g == null || isNaN(g)) return false;
g = parseInt(g) % 2;
switch (s.length)
{
case 8 :
if (new Date() > d.setFullYear(d.getFullYear() + 19)) return false;
r = /^[\d]{8}$/;
if (!r.test(s)) return false;
if (s != t) return false; break;
case 15 :
r = /^[\d]{15}$/;
if (!r.test(s)) return false;
if (s.substr(6, 6) != t.substr(2)) return false;
if (parseInt(s.charAt(14)) % 2 != g) return false; break;
case 18 :
r = /^(?:[\d]{18}|[\d]{17}X)$/i;
if (!r.test(s)) return false;
if (s.substr(6, 8) != t) return false;
if (parseInt(s.charAt(16)) % 2 != g) return false;
var n = 0;
var w = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var c = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
for (var i = 0; i < 17; i++)
{
n += parseInt(s.charAt(i)) * w[i];
}
if (s.charAt(17).toUpperCase() != c[n % 11]) return false; break;
default :
return false;
}
return true;
}function dblNum(n)
{
return parseInt(n) < 10 ? "0" + n : n;
}
//下边是在ASP中调用该函数 checkIDCard
//var cardID = "422324860305482";
//Response.Write(checkIDCard(cardID, "03/05/1986", 0));