您的位置:首页 > Web前端 > JavaScript

身份证号js简单验证 .

2012-05-10 13:35 246 查看
在做项目时遇到了一个身份证号验证的问题,在网上搜到一个简单的验证身份证格式的js代码,遂转了过来,以备不时之需。

//身份证号码校验,并从中拆分出出生年月日和性别


var yyyy;


var mm;


var dd;


var birthday;


var sex;




function getYear(){


return yyyy;


}


function getMonth(){


return mm;


}


function getDate(){


return dd;


}


function getBirthday(){


return birthday;


}


function getSex(){


return sex;


}


function getAge(){


var mm=getMonth();


if (mm<10)


mm=mm.substring(1,2);


return Math.floor((parseInt(_getYear())*12+parseInt(_getMonth())-parseInt(getYear())*12-parseInt(mm))/12);


}


//判断是否大龄,男50,女40


function isBigAge(){


if (parseInt(getAge())>=40 && parseInt(getSex())==2)


return "1";


if (parseInt(getAge())>=50 && parseInt(getSex())==1)


return "1";


return "0";


}


//校验身份证号码


function CheckValue(idCard){


var id=idCard;


var id_length=id.length;




if (id_length==0){


alert("请输入身份证号码!");


return false;


}




if (id_length!=15 && id_length!=18){


alert("身份证号长度应为15位或18位!");


return false;


}




if (id_length==15){


yyyy="19"+id.substring(6,8);


mm=id.substring(8,10);


dd=id.substring(10,12);




if (mm>12 || mm<=0){


alert("输入身份证号,月份非法!");


return false;


}




if (dd>31 || dd<=0){


alert("输入身份证号,日期非法!");


return false;


}




birthday=yyyy+ "-" +mm+ "-" +dd;




if ("13579".indexOf(id.substring(14,15))!=-1){


sex="1";


}else{


sex="2";


}


}else if (id_length==18){


if (id.indexOf("X") > 0 && id.indexOf("X")!=17 || id.indexOf("x")>0 && id.indexOf("x")!=17){


alert("身份证中"X"输入位置不正确!");


return false;


}




yyyy=id.substring(6,10);


if (yyyy>2200 || yyyy<1900){


alert("输入身份证号,年度非法!");


return false;


}




mm=id.substring(10,12);


if (mm>12 || mm<=0){


alert("输入身份证号,月份非法!");


return false;


}




dd=id.substring(12,14);


if (dd>31 || dd<=0){


alert("输入身份证号,日期非法!");


return false;


}




if (id.charAt(17)=="x" || id.charAt(17)=="X")


{


if ("x"!=GetVerifyBit(id) && "X"!=GetVerifyBit(id)){


alert("身份证校验错误,请检查最后一位!");


return false;


}




}else{


if (id.charAt(17)!=GetVerifyBit(id)){


alert("身份证校验错误,请检查最后一位!");


return false;


}


}




birthday=id.substring(6,10) + "-" + id.substring(10,12) + "-" + id.substring(12,14);


if ("13579".indexOf(id.substring(16,17)) > -1){


sex="1";


}else{


sex="2";


}


}




return true;


}


//15位转18位中,计算校验位即最后一位


function GetVerifyBit(id){


var result;


var nNum=eval(id.charAt(0)*7+id.charAt(1)*9+id.charAt(2)*10+id.charAt(3)*5+id.charAt(4)*8+id.charAt(5)*4+id.charAt(6)*2+id.charAt(7)*1+id.charAt(8)*6+id.charAt(9)*3+id.charAt(10)*7+id.charAt(11)*9+id.charAt(12)*10+id.charAt(13)*5+id.charAt(14)*8+id.charAt(15)*4+id.charAt(16)*2);


nNum=nNum%11;


switch (nNum) {


case 0 :


result="1";


break;


case 1 :


result="0";


break;


case 2 :


result="X";


break;


case 3 :


result="9";


break;


case 4 :


result="8";


break;


case 5 :


result="7";


break;


case 6 :


result="6";


break;


case 7 :


result="5";


break;


case 8 :


result="4";


break;


case 9 :


result="3";


break;


case 10 :


result="2";


break;


}


//document.write(result);


return result;


}


//15位转18位


function Get18(idCard){


if (CheckValue(idCard)){


var id = idCard;


var id18=id;


if (id.length==0){


alert("请输入15位身份证号!");


return false;


}


if (id.length==15){


if (id.substring(6,8)>20){


id18=id.substring(0,6)+"19"+id.substring(6,15);


}else{


id18=id.substring(0,6)+"20"+id.substring(6,15);


}




id18=id18+GetVerifyBit(id18);


}




return id18;


}else{


return false;


}


}




function checkIdcard(idcard){


var Errors=new Array(


"验证通过!",


"身份证号码位数不对!",


"身份证号码出生日期超出范围或含有非法字符!",


"身份证号码校验错误!",


"身份证地区非法!"


);


var area={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:"国外"}




var idcard,Y,JYM;


var S,M;


var idcard_array = new Array();


idcard_array = idcard.split("");


//地区检验


if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];


//身份号码位数及格式检验


switch(idcard.length){


case 15:


if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){


ereg=/^[1-9][0-9]{5}[0 -9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性


} else {


ereg =/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1]) |(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/; //测试出生日期的合法性


}


if(ereg.test(idcard)) return Errors[0];


else return Errors[2];


break;


case 18:


//18位身份号码检测


//出生日期的合法性检查


//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))


//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))


if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){


ereg=/^[1-9][0-9]{5}19[0-9]{2} ((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1 -2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式


} else {


ereg =/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1]) |(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0- 9Xx]$/;//平年出生日期的合法性正则表达式


}


if(ereg.test(idcard)){//测试出生日期的合法性


//计算校验位


S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7


+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9


+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10


+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5


+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8


+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4


+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2


+ parseInt(idcard_array[7]) * 1


+ parseInt(idcard_array[8]) * 6


+ parseInt(idcard_array[9]) * 3 ;


Y = S % 11;


M = "F";


JYM = "10X98765432";


M = JYM.substr(Y,1);//判断校验位


if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位


else return Errors[3];


}


else return Errors[2];


break;


default:


return Errors[1];


break;


}




}


var sss = "000000000000000000"


document.write (checkIdcard(sss))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: