身份证号码校验及识别提取函数解析
AI辅助制作标识
该文章由丸子引导AI辅助制作生成,如有改进意见,欢迎评论区留言。引言
身份证号码是每个公民的重要凭证,在日常生活和工作中有着广泛的应用。本文将详细介绍身份证号码的校验及其相关信息的提取函数,帮助读者理解并实现身份证号码的有效验证和信息提取。
身份证号校验函数
以下是身份证号校验函数的代码展示:
// 身份证号校验函数
function validateIDCard(id) {
// 1 "验证通过!", 0 //校验不通过
var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
//号码规则校验
if (!format.test(id)) {
return { 'status': 0, 'msg': '身份证号码不合规' };
}
//区位码校验
//出生年月日校验 前正则限制起始年份为1900;
var year = id.substr(6, 4), //身份证年
month = id.substr(10, 2), //身份证月
date = id.substr(12, 2), //身份证日
time = Date.parse(month + '-' + date + '-' + year), //身份证日期时间戳date
now_time = Date.parse(new Date()), //当前时间戳
dates = (new Date(year, month, 0)).getDate(); //身份证当月天数
if (time > now_time || date > dates) {
return { 'status': 0, 'msg': '出生日期不合规' }
}
//校验码判断
var coefficients = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //系数
var checkCodeMap = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; //校验码对照表
var idArray = id.split("");
var sum = 0;
for (var i = 0; i < 17; i++) {
sum += parseInt(idArray[i]) * coefficients[i];
}
if (idArray[17].toUpperCase() != checkCodeMap[sum % 11].toUpperCase()) {
return { 'status': 0, 'msg': '身份证校验码不合规' }
}
return { 'status': 1, 'msg': '校验通过' }
}
实现原理与步骤解析
- 正则表达式校验:使用正则表达式检查身份证号码的格式是否正确,包括省份代码、出生日期等基本信息。
- 出生日期校验:通过提取身份证中的出生日期,并与当前日期进行对比,确保出生日期合理。
- 校验码校验:计算身份证号码的校验码,并与身份证号码中的校验码进行对比,确保其正确性。
身份证号识别提取函数
以下是身份证号识别提取函数的代码展示:
// 根据身份证号获取籍贯、生日、性别、年龄
function extractIDCardData(idCard) {
if (idCard !== '') {
// 根据身份证号获取籍贯
var hometownMap = {
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: "澳门"
};
hometown = hometownMap[parseInt(idCard.substring(0, 2))];
// 根据身份证号获取出生日期
birthday = idCard.substring(6, 10) + "-" + idCard.substring(10, 12) + "-" + idCard.substring(12, 14);
// 根据身份证号获取性别
gender = parseInt(idCard.substr(16, 1)) % 2 == 1 ? "男" : "女";
// 根据身份证号获取年龄
var currentDate = new Date();
age = currentDate.getFullYear() - parseInt(idCard.substring(6, 10)) - 1;
}
}
实现原理与步骤解析
- 籍贯提取:通过身份证号码的前两位数字,从预定义的省市代码表中获取籍贯信息。
- 生日提取:提取身份证号码中的出生年份、月份和日期,并组装成完整的出生日期。
- 性别提取:通过身份证号码的倒数第二位数字确定性别,奇数为男性,偶数为女性。
- 年龄计算:根据当前年份和身份证中的出生年份计算年龄。
综合示例
下面是一个综合使用校验与提取函数的实例讲解:
var idCard = "11010519491231002X";
var validationResult = validateIDCard(idCard);
if (validationResult.status === 1) {
extractIDCardData(idCard);
console.log("籍贯: " + hometown);
console.log("生日: " + birthday);
console.log("性别: " + gender);
console.log("年龄: " + age);
} else {
console.log(validationResult.msg);
}
通过上述实例,我们可以验证身份证号码的有效性,并提取相关信息,如籍贯、生日、性别和年龄。
结论
本文详细介绍了身份证号码的校验函数和信息提取函数,通过代码展示和原理解析,帮助读者理解并实现身份证号码的有效验证和信息提取。使用时请注意身份证号码的保密性,避免泄露个人隐私。
提示:在实际应用中,请确保输入的身份证号码真实有效,并妥善处理用户隐私信息。
身份证号码校验及识别提取函数解析 by https://oneszhang.com/archives/73.html