编写程序前先来了解下身份证号的构成: 身份证号分为两种,旧的为15位,新的为18位。 身份证15位编码规则:dddddd yymmdd xx p 其中 dddddd:地区码 yymmdd: 出生年月日 xx: 顺序类编码,无法确定 p: 性别,奇数为男,偶数为女; 身份证18位编码规则:dddddd yyyymmdd xxx y 其中 dddddd:地区码 yyyymmdd: 出生年月日 xxx:顺序类编码,无法确定,奇数为男,偶数为女 y: 校验码,该位数值可通过前17位计算获得,计算的公式见程序,一些需要用到的常数: 18位号码加权因子 在JavaScript中实现超精准的身份证号验证涉及到对身份证号码结构的理解和特定的计算逻辑。身份证号码分为15位和18位两种类型,其中15位身份证已经逐渐被淘汰,现在普遍使用的是18位身份证。18位身份证的构成如下: 1. 地区码(dddddd):表示持证人的出生地,由6位数字组成。 2. 出生年月日(yyyymmdd):8位数字,表示出生日期。 3. 顺序类编码(xxx):3位数字或字母,用于区分同一天出生的人,奇数分配给男性,偶数分配给女性。 4. 校验码(y):1位数字或X,通过特定算法计算得出,用于验证身份证号码的正确性。 在JavaScript中验证18位身份证号码的步骤包括: 1. 基本格式检查:首先确保输入的身份证号码长度为18位,并去除字符串中的空格。 2. 出生日期验证:将身份证号码的第7位到第14位取出,转换为日期格式,然后创建一个JavaScript Date对象进行比较,确保日期有效。 3. 计算校验码:使用加权因子(Wi)数组,对身份证号码的前17位进行逐位乘法累加,之后用求和结果对11取模,得到校验码所在的位置。如果校验码为10,则用X代替。 4. 比较校验码:将计算得到的校验码位置与身份证号码的第18位进行比较,如果一致则验证通过。 以下是核心的JavaScript代码实现: ```javascript // 加权因子 var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 身份证验证位值 var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 验证身份证函数 function IdCardValidate(idCard) { idCard = trim(idCard.replace(/ /g, "")); if (idCard.length == 15) { // 15位身份证验证 return isValidityBrithBy15IdCard(idCard); } else if (idCard.length == 18) { var a_idCard = idCard.split(""); if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) { return true; } else { return false; } } else { return false; } } // 验证18位身份证校验码 function isTrueValidateCodeBy18IdCard(a_idCard) { var sum = 0; if (a_idCard[17].toLowerCase() == 'x') { a_idCard[17] = 10; } for (var i = 0; i < 17; i++) { sum += Wi[i] * a_idCard[i]; } valCodePosition = sum % 11; return a_idCard[17] == ValideCode[valCodePosition]; } // 验证18位身份证出生日期 function isValidityBrithBy18IdCard(idCard18) { var year = idCard18.substring(6, 10); var month = idCard18.substring(10, 12); var day = idCard18.substring(12, 14); var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day)); return temp_date.getFullYear() == parseFloat(year) && temp_date.getMonth() == parseFloat(month) - 1 && temp_date.getDate() == parseFloat(day); } ``` 这段代码提供了完整的身份证号码验证功能,包括对18位身份证的出生日期验证和校验码计算。通过调用`IdCardValidate`函数并传入身份证号码,可以判断输入的身份证号码是否有效。需要注意的是,这个验证并不涉及身份证号码的真实性,只能保证号码格式上的正确性。
- 粉丝: 7
- 资源: 961
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0