目前中国居民身份证有15位和18位两种,我们需要了解两种身份证号码各位的含义。
1、15位身份证号码各位的含义:
1、第l一6位数为行政区划代码; 2、第7—12位数为出生日期代码; 3、第13---15位数为分配顺序代码;
其中15位男为单数,女为双数
2、18位身份证号码各位的含义:
1、第l一6位数为行政区划代码; 2、第7—14位数为出生日期代码; 3、第14---17位数为分配顺序代码;4、校验码;
校验码是由身份证号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现Ⅹ,但如果尾号是10,那么就得用Ⅹ来代替。因为如果用10做尾号,那么此人的身份证就变成了19位。其中17位男为单数,女为双数
1、通过身份证号码查出生日期
/**
* 通过身份证号码查出生日期
* @param {*} idCard
*/
function getBirthday (idCard){
var birthday = "";
if (idCard != null && idCard != "") {
if (idCard.length == 15) {
birthday = "19" + idCard.substr(6, 6);
} else if (idCard.length == 18) {
birthday = idCard.substr(6, 8);
}
birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
}
return birthday;
};
2、通过身份证判断性别
/**
* 通过身份证判断性别
* @param {身份证号码} idCard
*/
function getSex (idCard){
var sexStr = "";
if (parseInt(idCard.slice(-2, -1)) % 2 == 1) {
sexStr = "男";
} else {
sexStr = "女";
}
return sexStr;
};
3、通过身份证号计算年龄
/**
* 通过身份证号计算年龄
* @param {身份证号码} idCard
*/
function getAge (idCard) {
var len = (idCard + "").length;
if (len == 0) {
return 0;
} else {
if (len != 15 && len != 18) {
//身份证号码只能为15位或18位其它不合法
return 0;
}
}
var strBirthday = "";
if (len == 18) {
//处理18位的身份证号码从号码中得到生日和性别代码
strBirthday =
idCard.substr(6, 4) +
"/" +
idCard.substr(10, 2) +
"/" +
idCard.substr(12, 2);
}
if (len == 15) {
strBirthday =
"19" +
idCard.substr(6, 2) +
"/" +
idCard.substr(8, 2) +
"/" +
idCard.substr(10, 2);
}
//时间字符串里,必须是“/”
var birthDate = new Date(strBirthday);
var nowDateTime = new Date();
var age = nowDateTime.getFullYear() - birthDate.getFullYear();
//再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
if (
nowDateTime.getMonth() < birthDate.getMonth() ||
(nowDateTime.getMonth() == birthDate.getMonth() &&
nowDateTime.getDate() < birthDate.getDate())
) {
age--;
}
return age;
};