身份证基础校验
/*身份证基础校验*/
export function checkidcard(idcard) {
var result = true;
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 = idcard.split("");
if (area[parseInt(idcard.substr(0, 2))] == null) {
result = false;
}
var ereg = "";
switch (idcard.length) {
case 18:
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|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(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]) {
result = true;
} else {
result = false;
}
} else {
result = false;
}
break;
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)) {
result = true;
} else {
result = false;
}
break;
default:
result = false;
break;
}
return result;
}
通过身份证号获取生日,性别
/**
* 通过身份证号获取生日,性别
* 返回:{birth:",sex:"}
* getBirthByCid 通过身份证号获取生日,性别
* @param {str} 身份证号码
* @return {obj} {birth: ", sex: "}
*/
export function getInfoByIdcard(idcard) {
var rel = {};
var tmpStr = "";
var sexStr = "";
idcard = idcard.replace(/\s*/g, "");
if (isDefined(idcard) && idcard.length == 18) {
tmpStr = idcard.substring(6, 14);
tmpStr =
tmpStr.substring(0, 4) +
"-" +
tmpStr.substring(4, 6) +
"-" +
tmpStr.substring(6);
sexStr = parseInt(idcard.substr(16, 1), 10) % 2 ? "男" : "女";
} else if (isDefined(idcard) && idcard.length == 15) {
tmpStr = idcard.substring(6, 12);
var year = tmpStr.substring(0, 2);
if (parseInt(year) < 20) {
tmpStr = "20" + tmpStr;
} else {
tmpStr = "19" + tmpStr;
}
tmpStr =
tmpStr.substring(0, 4) +
"-" +
tmpStr.substring(4, 6) +
"-" +
tmpStr.substring(6);
sexStr = parseInt(idcard.substr(14, 1), 10) % 2 ? "男" : "女";
} else {
tmpStr = "";
sexStr = "";
}
rel.birth = tmpStr;
rel.sex = sexStr;
return rel;
}
根据身份证号判断性别
/**
* getSexByIdcard 根据身份证号判断性别
* @param {str} idcard 身份证号
* @return {str} "男"/"女"
*/
export function getSexByIdcard(idcard) {
if (parseInt(idcard.substr(16, 1)) % 2 == 1) {
return "男";
} else {
return "女";
}
}
根据出生日期获取年龄
/**
* getAgeByBirth 根据出生日期获取年龄
* @param {str} birthday 出生日期 2018-02-08
* @return {num} 年龄
*/
export function getAgeByBirth(birthday) {
var r = birthday.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if (r == null) {
return false;
}
var birth = new Date(r[1], r[3] - 1, r[4]);
if (
birth.getFullYear() == r[1] &&
birth.getMonth() + 1 == r[3] &&
birth.getDate() == r[4]
) {
var today = new Date();
today.setDate(today.getDate() + 1);
var age = today.getFullYear() - r[1];
if (today.getMonth() > birth.getMonth()) {
return age;
}
if (today.getMonth() == birth.getMonth()) {
if (today.getDate() >= birth.getDate()) {
return age;
} else {
return age - 1;
}
}
if (today.getMonth() < birth.getMonth()) {
return age - 1;
}
}
return age;
}
通过身份证号获取年龄
/**
* 通过身份证号获取年龄
* @param {str} idcard:身份证号
* @return {num} age 年龄
*/
export function getAgeByIdcard(idcard) {
var age = "";
var tmpStr = "";
idcard = trimAll(idcard);
if (idcard.length == 15) {
tmpStr = idcard.substring(6, 12);
var year = tmpStr.substring(0, 2);
if (parseInt(year) < 20) {
tmpStr = "20" + tmpStr;
} else {
tmpStr = "19" + tmpStr;
}
tmpStr =
tmpStr.substring(0, 4) +
"-" +
tmpStr.substring(4, 6) +
"-" +
tmpStr.substring(6);
} else {
tmpStr = idcard.substring(6, 14);
tmpStr =
tmpStr.substring(0, 4) +
"-" +
tmpStr.substring(4, 6) +
"-" +
tmpStr.substring(6);
}
age = getAgeByBirth(tmpStr);
return age;
}