JavaScript页面校验
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
//身份证号码校验,并从中拆分出出生年月日和性别
var yyyy;
var mm;
var dd;
var birthday;
var sex;
var province;
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){
province=id.substring(0,2);
if (!ValidateProvince(province)){
alert("身份证号码地区非法!");
return false;
}
mm=id.substring(8,10);
if (!(mm>0 && mm<=12)){
alert("身份证号码月份非法!");
return false;
}
dd=id.substring(10,12);
if(!ValidateDate(dd)){
alert("身份证号码日期非法!");
return false;
}
yyyy="19"+id.substring(6,8);
birthday=yyyy+ "-" +mm+ "-" +dd;
if ("13579".indexOf(id.substring(14,15))!=-1){
sex="1";
}else{
sex="2";
}
}else if (id_length==18){
province=id.substring(0,2);
if (!ValidateProvince(province)){
alert("身份证号码地区非法!");
return false;
}
yyyy=id.substring(6,10);
if (!(yyyy>=1900 && yyyy<=2200)){
alert("身份证号码年度非法!");
return false;
}
mm=id.substring(10,12);
if (!(mm>0 && mm<=12)){
alert("身份证号码月份非法!");
return false;
}
dd=id.substring(12,14);
if(!ValidateDate(dd)){
alert("身份证号码日期非法!");
return false;
}
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;
}
//校验地区
function ValidateProvince(province)
{
var provinceArray={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(provinceArray[parseInt(province)]!=null) return true;
return false;
}
//校验日期
function ValidateDate(dd)
{
//创建各月份天数查找表(2月份除外)
var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,'08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31,'1' : 31,'3' : 31, '4' : 30,'5' : 31,'6' : 30,'7' : 31,'8' : 31,'9' : 30}
//校验月份和天数
if(arrayLookup[mm] != null) {
if(dd <= arrayLookup[mm] && dd != 0)
return true;
}
//校验2月份天数(考虑闰年)
var isLeapYear = (yyyy % 4 == 0 && (yyyy % 100 != 0 || yyyy % 400 == 0));
if( ((isLeapYear && dd <= 29) || (!isLeapYear && dd <=28)) && dd !=0)
return true;
return false;
}
//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;
}
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;
}
}