1.驗證身份證
var idcard=function (_v,item) {
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 Y, JYM;
var S, M;
var idcard_array = new Array();
idcard_array = _v.split("");
// 地區檢驗
if (area[parseInt(_v.substr(0, 2))] == null) {
return "身份證號碼地區非法!!,格式例如:32";
}
// 身份號碼位數及格式檢驗
switch (_v.length) {
case 15 :
if ((parseInt(_v.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(_v.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(_v.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(_v)){}
else {
return "身份證號碼出生日期超出範圍,格式例如:19860817";
}
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(_v.substr(6, 4)) % 4 == 0 || (parseInt(_v.substr(6, 4)) % 100 == 0 && parseInt(_v.substr(6, 4)) % 4 == 0)) {
ereg = /^[1-9][0-9]{5}(19|20)[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|20)[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(_v)) {// 測試出生日期的合法性
// 計算校驗位
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);// 判斷校驗位
// alert(idcard_array[17]);
if (M == idcard_array[17]) {
// 檢測ID的校驗位
} else {
return "身份證號碼末位校驗位校驗出錯,請注意x的大小寫,格式例如:201X";
}
} else {
return "身份證號碼出生日期超出範圍,格式例如:19860817";
}
break;
default :
return "身份證號碼位數不對,應該為15位或是18位";
break;
}
}複製程式碼
2.通過身份證號碼得到性別
/**
* 通過身份證號碼得到性別
* 身份證號碼 return 1/2 男/女
*/
var getSexForCard=function (str) {
var inputStr = str.toString();
var sex;
if (inputStr.length == 18) {
sex = inputStr.charAt(16);
if (sex % 2 == 0) {
return 2;
} else {
return 1;
}
} else {
sex = inputStr.charAt(14);
if (sex % 2 == 0) {
return 2;
} else {
return 1;
}
}
}複製程式碼
3.通過身份證號碼得到年齡
var jsGetAge=function (strBirthday) {
var returnAge;
var birthYear = strBirthday.slice(0,4);
var birthMonth = strBirthday.slice(4,6);
var birthDay = strBirthday.slice(6);
d = new Date();
var nowYear = d.getFullYear();
var nowMonth = d.getMonth() + 1;
var nowDay = d.getDate();
if(nowYear == birthYear){
returnAge = 0;//同年 則為0歲
}
else{
var ageDiff = nowYear - birthYear ; //年之差
if(ageDiff > 0){
if(nowMonth == birthMonth) {
var dayDiff = nowDay - birthDay;//日之差
if(dayDiff < 0)
{
returnAge = ageDiff - 1;
}
else
{
returnAge = ageDiff ;
}
}
else
{
var monthDiff = nowMonth - birthMonth;//月之差
if(monthDiff < 0)
{
returnAge = ageDiff - 1;
}
else
{
returnAge = ageDiff ;
}
}
}
else
{
returnAge = -1;//返回-1 表示出生日期輸入錯誤 晚於今天
}
}
return returnAge;//返回週歲年齡
}複製程式碼