身份证校验:15位与18位身份证号码JS验证

1 下载量 150 浏览量 更新于2024-08-30 收藏 73KB PDF 举报
"15位和18位身份证JS校验的简单实例" 本文将介绍如何在JavaScript中实现15位和18位身份证号码的有效性校验。首先,我们需要了解身份证号码的结构和规则。 身份证号码由17位数字本体码和1位校验码组成,具体分为以下几个部分: 1. 地址码(6位):表示持证人常住户口所在县(市、旗、区)的行政区划代码,遵循GB/T2260标准。例如,前两位数字代表省级行政区域,接下来的四位数字代表市级行政区域。 2. 出生日期码(8位):表示出生的年、月、日,按照GB/T7408规定,无分隔符,例如19900101表示1990年1月1日。 3. 顺序码(3位):在同一地址码内,对同年、同月、同日出生的人进行排序,奇数分配给男性,偶数分配给女性。 4. 校验码(1位):通过特定的加权求和公式计算得出,用于验证身份证号码的正确性。计算过程包括对前17位数字乘以对应的加权因子求和,然后取模11,最后根据余数确定校验码,余数为0-10分别对应校验码10X98765432。 在JavaScript中,我们可以编写一个函数来校验15位或18位的身份证号码: ```javascript function validateID(id) { // 验证长度 if (id.length !== 15 && id.length !== 18) return false; // 转换15位到18位 if (id.length === 15) { id = id.slice(0, 6) + '19' + id.slice(6); } // 加权因子 const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 校验码对应关系 const checkCodeMap = ['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 mod = sum % 11; const checkCode = checkCodeMap[mod]; // 验证校验码 return checkCode === id[17].toUpperCase(); } // 示例 console.log(validateID('110105199001010010')); // 输出:true console.log(validateID('110105199001010011')); // 输出:false ``` 这个`validateID`函数首先检查身份证号码的长度,如果是15位的,会自动转换为18位(在出生年份前添加'19')。接着,它使用加权因子计算校验码,并与身份证号码末尾的校验码进行比较,如果一致则返回`true`,否则返回`false`。 通过这样的校验方式,我们可以确保输入的身份证号码符合国家规定的格式和计算规则,从而提高了数据的准确性。在实际应用中,这种校验对于用户注册、个人信息录入等场景至关重要,能有效防止因身份证号码错误而引发的问题。