当前位置: 首页 > news >正文

如何用JavaScript验证身份证号码?

验证身份证号码时,可以使用 JavaScript 进行格式检查和校验位的计算。以下是一个基本的验证身份证号码的示例,包括中国身份证号码的18位和15位格式的验证。

中国身份证号码格式

  1. 18位身份证号码

    • 前17位为数字,最后一位为数字或字母X。
    • 计算校验位的方法是根据前17位数字进行特定的加权计算。
  2. 15位身份证号码

    • 15位为数字。

示例代码

下面是一个 JavaScript 函数,用于验证身份证号码:

function validateIDCard(id) {
    // 15位身份证正则表达式
    const reg15 = /^\d{15}$/;

    // 18位身份证正则表达式
    const reg18 = /^\d{17}[\dX]$/i;

    if (reg15.test(id)) {
        return validate15IDCard(id);
    } else if (reg18.test(id)) {
        return validate18IDCard(id);
    } else {
        return false; // 格式不正确
    }
}

function validate15IDCard(id) {
    // 将15位身份证转换为18位
    let id17 = id.substring(0, 6) + '19' + id.substring(6);
    return validate18IDCard(id17);
}

function validate18IDCard(id) {
    // 校验位权重
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 校验位对应值
    const checkDigits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

    let sum = 0;
    for (let i = 0; i < 17; i++) {
        sum += parseInt(id[i]) * weights[i]; // 加权求和
    }

    const checkIndex = sum % 11; // 计算校验位索引
    const checkDigit = checkDigits[checkIndex]; // 获取校验位

    return id[17].toUpperCase() === checkDigit; // 比对校验位
}

// 示例用法
const idCard = "123456789012345"; // 输入的身份证号码
if (validateIDCard(idCard)) {
    console.log("身份证号码有效");
} else {
    console.log("身份证号码无效");
}

说明

  1. 正则表达式

    • reg15 用于匹配15位身份证号码。
    • reg18 用于匹配18位身份证号码(最后一位可以是数字或字母X)。
  2. 验证逻辑

    • 如果输入的是15位身份证号码,使用 validate15IDCard 函数将其转换为18位并进行验证。
    • validate18IDCard 函数计算前17位的加权和,并根据计算结果获取校验位,最后与输入的校验位进行比较。
  3. 示例用法

    • 可以替换 idCard 的值进行测试,验证身份证号码的有效性。

相关文章:

  • vue 使用v-model实现父子组件传值——子父组件同步更新
  • 数据库基础知识点(系列三)
  • 创新NDT解决方案:XARION激光超声系统助力航空航天材料的高效监测
  • xml文件
  • Codeforces Round 1013 (Div. 3)(A-F)
  • 程序化广告行业(36/89):广告投放全流程及活动设置详解
  • MinGW与使用VScode写C语言适配
  • UI前端与数字孪生:打造智慧城市的双引擎
  • Fegin 400错误分析
  • idea 没有 add framework support(添加框架支持)选项
  • [Lc4_dfs] 括号生成 | 组合 | 目标和
  • docker创建registry镜像仓库2.8版本
  • 宝塔面板部署 Laravel 项目无法访问静态资源的解决方法
  • MySQL 进阶语法:函数、约束、多表查询、事务
  • 分支结构- P1424-小鱼的航程-第二十六天
  • 从dev分支checkout出一个functionA分支开发功能
  • SvelteKit 最新中文文档教程(11)—— 部署 Netlify 和 Vercel
  • 树状数组 3 :区间修改,区间查询
  • K8S学习之基础五十一:k8s部署jenkins
  • Thera图像超分辨率模型使用
  • 中年人多活动有助预防阿尔茨海默病
  • 杨德龙:取得长期投资胜利法宝,是像巴菲特一样践行价值投资
  • 新华社:让历史照鉴未来
  • 德国巴斯夫:关税政策加剧全球市场不确定性,间接影响已显现
  • 2025上海车展圆满闭幕,共接待海内外观众101万人次
  • 5月1日全国铁路发送旅客2311.9万人次,创历史新高