MENU

身份证号码校验及识别提取函数解析

• 2024 年 06 月 18 日 • 阅读: 513 • 实用技巧,经经验验

身份证号码校验及识别提取函数解析

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': '校验通过' }
}

实现原理与步骤解析

  1. 正则表达式校验:使用正则表达式检查身份证号码的格式是否正确,包括省份代码、出生日期等基本信息。
  2. 出生日期校验:通过提取身份证中的出生日期,并与当前日期进行对比,确保出生日期合理。
  3. 校验码校验:计算身份证号码的校验码,并与身份证号码中的校验码进行对比,确保其正确性。

身份证号识别提取函数

以下是身份证号识别提取函数的代码展示:

// 根据身份证号获取籍贯、生日、性别、年龄
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;
    }
}

实现原理与步骤解析

  1. 籍贯提取:通过身份证号码的前两位数字,从预定义的省市代码表中获取籍贯信息。
  2. 生日提取:提取身份证号码中的出生年份、月份和日期,并组装成完整的出生日期。
  3. 性别提取:通过身份证号码的倒数第二位数字确定性别,奇数为男性,偶数为女性。
  4. 年龄计算:根据当前年份和身份证中的出生年份计算年龄。

综合示例

下面是一个综合使用校验与提取函数的实例讲解:

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);
}

通过上述实例,我们可以验证身份证号码的有效性,并提取相关信息,如籍贯、生日、性别和年龄。

结论

本文详细介绍了身份证号码的校验函数和信息提取函数,通过代码展示和原理解析,帮助读者理解并实现身份证号码的有效验证和信息提取。使用时请注意身份证号码的保密性,避免泄露个人隐私。

提示:在实际应用中,请确保输入的身份证号码真实有效,并妥善处理用户隐私信息。

返回文章列表 打赏
本页链接的二维码
打赏二维码