网上很多关于身份证校验的javascript代码,不过都没给全,以下是我添加全了函数一起提供的,希望对大家有所帮助。
javascript身份证号码验证-支持18位带x身份证。
function isDateyyyyMMdd(sDate)//专用于yyyyMMdd格式
{
var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31];
var iaDate = new Array(3);
var year, month, day;
if (arguments.length != 1) return false;
if (sDate.length != 8) return false;
iaDate[0] = sDate.substring(0,4);
iaDate[1] = sDate.substring(4,6);
iaDate[2] = sDate.substring(6,8);
if (iaDate.length != 3) return false;
if (iaDate[1].length > 2 || iaDate[2].length > 2) return false;
year = parseFloat(iaDate[0]);
month = parseFloat(iaDate[1]);
day=parseFloat(iaDate[2]);
//alert(year);
//alert(month);
//alert(day);
if (year < 1900 || year > 2100) return false;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
if (month < 1 || month > 12) return false;
if (day < 1 || day > iaMonthDays[month - 1]) return false;
return true;
}
function isDateyyMMdd(sDate)//专用于yyMMdd格式,
{
var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31];
var iaDate = new Array(3);
var year, month, day;
if (arguments.length != 1) return false;
if (sDate.length != 6) return false;
iaDate[0] = sDate.substring(0,2);
iaDate[1] = sDate.substring(2,4);
iaDate[2] = sDate.substring(4,6);
if (iaDate.length != 3) return false;
if (iaDate[1].length > 2 || iaDate[2].length > 2) return false;
year = parseFloat("19" + iaDate[0]); //短日期直接加19,可能在某些场合判断错误,本函数设计目的是用于15位身份证验证
month = parseFloat(iaDate[1]);
day=parseFloat(iaDate[2]);
//alert(year);
//alert(month);
//alert(day);
if (year < 1900 || year > 2100) return false;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
if (month < 1 || month > 12) return false;
if (day < 1 || day > iaMonthDays[month - 1]) return false;
return true;
}
//--身份证号码验证-支持新的带x身份证
//必须配合上面isDateyyyyMMdd(date8),isDateyyMMdd(date6)两个函数使用
function isIdCardNo(num)
{
var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var error;
var varArray = new Array();
var intValue;
var lngProduct = 0;
var intCheckDigit;
var intStrLen = num.length;
var idNumber = num;
// initialize
if ((intStrLen != 15) && (intStrLen != 18)) {
//error = "输入身份证号码长度不对!";
//alert(error);
//frmAddUser.txtIDCard.focus();
return false;
}
// check and set value
for(i=0;i<intStrLen;i++) {
varArray[i] = idNumber.charAt(i);
if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
//error = "错误的身份证号码!.";
//alert(error);
//frmAddUser.txtIDCard.focus();
return false;
} else if (i < 17) {
varArray[i] = varArray[i]*factorArr[i];
}
}
if (intStrLen == 18) {
//check date
var date8 = idNumber.substring(6,14);
//alert(date8);
if (isDateyyyyMMdd(date8) == false) {
//error = "身份证中日期信息不正确!.";
//alert(error);
return false;
}
// calculate the sum of the products
for(i=0;i<17;i++) {
lngProduct = lngProduct + varArray[i];
}
// calculate the check digit
intCheckDigit = 12 - lngProduct % 11;
switch (intCheckDigit) {
case 10:
intCheckDigit = 'X';
break;
case 11:
intCheckDigit = 0;
break;
case 12:
intCheckDigit = 1;
break;
}
// check last digit
if (varArray[17].toUpperCase() != intCheckDigit) {
//error = "身份证效验位错误!正确为: " + intCheckDigit + ".";
//alert(error);
return false;
}
}
else{ //length is 15
//check date
var date6 = idNumber.substring(6,12);
//alert(date6);
if (isDateyyMMdd(date6) == false) {
//alert("身份证日期信息有误!.");
return false;
}
}
//alert ("Correct.");
return true;
}
- 1
- 2
前往页