Copy Code code as follows:
function Checkidcard (idcard) {
var errors=new Array (
"Validate through",
"ID card number is wrong!",
"ID number date of birth out of range or contain illegal characters!",
"ID card number checksum error!",
"The identity card area is illegal!"
);
var area={11: "Beijing", 12: "Tianjin", 13: "Hebei", 14: "Shanxi", 15: "Inner Mongolia", 21: "Liaoning", 22: "Jilin", 23: "Heilongjiang", 31: "Shanghai", 32: "Jiangsu", 33: "Zhejiang", 34: "Anhui", 35: "Fujian", 36: "Jiangxi", 37: "Shandong", 41: "Henan", 42: "Hubei", 43: "Hunan", 44: "Guangdong", 45: "Guangxi", 46: "Hainan", 50: "Chongqing", 51: "Sichuan", 52: "Guizhou", 53: "Yunnan", 54: "Tibet", 61: "Shaanxi", 62: "Gansu", 63: "Qinghai", 64: "Ningxia", 65: "Xinjiang", 71: "Taiwan", 81: "Hong Kong", 82: "Macao", 91: "Foreign"}
var Idcard,y,jym;
var s,m;
var idcard_array = new Array ();
Idcard_array = Idcard.split ("");
Regional inspection
if (Area[parseint (Idcard.substr (0,2))]==null) return errors[4];
Identification number and format test
Switch (idcard.length) {
Case 15:
if ((parseint (Idcard.substr (6,2)) +1900% 4 = 0 | | ((parseint (Idcard.substr (6,2)) +1900% = = 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}$/;//Test Birth date legality
} 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}$/;//test date of birth legality
}
if (Ereg.test (Idcard)) return errors[0];
else return errors[2];
Break
Case 18:
18-digit identification number detection
Validity of Birth date check
Leap Month Day: ((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]))
Flat Month Day: ((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))% = = 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]$/;//validity of a leap year birth date regular expression
} 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]$/;//excepting the legality of the date of birth regular expression
}
if (Ereg.test (Idcard)) {//test date of birth legality
Calculate Check digit
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);//Judge check digit
if (M = = idcard_array[17]) return errors[0]; Check digit of Detection ID
else return errors[3];
}
else return errors[2];
Break
Default
return errors[1];
Break
}
}