在编写用于验证身份证号码的JavaScript函数之前,首先需要了解中华人民共和国居民身份证号码的一些基本信息和校验规则。身份证号码一般由18位数字组成,前17位为本体码,最后一位为校验码。本体码的结构为6位地址码,8位出生日期码,以及3位顺序码,这些码之间没有分隔符。 地址码是编码对象常住户口所在地的行政区划代码,按照GB/T2260的规定执行。出生日期码表示编码对象的出生年月日,按照GB/T7408的规定执行。顺序码为在同一地址码所标识的区域内,同一天出生的人编定的顺序号,其中奇数分配给男性,偶数分配给女性。校验码则根据前面的17位数字按照ISO 7064:1983 MOD 11-2校验码计算方法来计算得出。 校验方法具体步骤如下: 1. 将身份证号码的前17位数字分别乘以不同的系数,这些系数从第一位到第十七位分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。 2. 将得到的乘积相加。 3. 将相加的结果除以11,得到余数。 4. 余数对应一个特定的检验码,余数与检验码的对应关系为:0对应1,1对应0,2对应X,3对应9,以此类推,直到余数为10时对应2。 5. 如果校验码与身份证号码最后一位相符,说明该身份证号码是合法的。 现在我们可以根据这些规则封装一个校验身份证号码的JavaScript函数: ```javascript function validateIdCard(idcard) { // 将输入的idcard转换为字符串类型 idcard = typeof idcard === 'string' ? idcard : String(idcard); // 使用正则表达式检查身份证号码的格式是否正确 let regx = /^[\d]{17}[0-9|X|x]{1}$/; if (!regx.test(idcard)) { return false; } // 定义前17位数字的系数数组 let seventeenIndex = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 截取身份证号码的前17位 let frontSeventeen = idcard.slice(0, 17); // 截取身份证号码的第18位 let eighteen = idcard.slice(17, 18); // 如果第18位是大写的'X',则转换为小写'x' eighteen = isNaN(parseInt(eighteen)) ? eighteen.toLowerCase() : parseInt(eighteen); // 定义一个变量来存储系数乘积之和的余数 let remainder = 0; // 利用循环计算前17位数字与系数乘积之和,并取余数 for (let i = 0; i < 17; i++) { remainder = (remainder + parseInt(frontSeventeen.charAt(i)) * seventeenIndex[i]) % 11; } // 定义余数对应的校验码数组 let remainderKeyArr = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; // 获取余数对应的校验码,并统一转换为小写进行比较 let remainderKey = remainderKeyArr[remainder] === 'X' ? remainderKeyArr[remainder].toLowerCase() : remainderKeyArr[remainder]; // 如果最后一位校验码正确,则返回true,否则返回false return remainderKey === eighteen; } // 测试函数 const idcard = '***x'; console.log(validateIdCard(idcard)); // 输出结果来判断idcard是否合法 ``` 通过这个函数,我们就可以在表单网页中对用户输入的身份证号码进行合法性验证了。当用户填写完毕后,系统会自动调用validateIdCard函数,对身份证号码进行格式和校验码的双重验证,以确保其真实性和准确性。
- 粉丝: 6
- 资源: 879
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助