身份证号码是我们每个人的身份识别证明,但是随便输入一个乱码的号码都会被系统认可,因此我们需要使用JavaScript对身份证号码进行校验,确保数据的正确性。本文将详细介绍JavaScript实现身份证号校验的方法。
一、正则表达式校验
使用正则表达式进行身份证号码校验是一种非常常见的方法,其代码如下:
function ValidateIdCardNum(idCardNum) { var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if (reg.test(idCardNum) === false) { return false; } else { return true; } }
上述代码中使用了正则表达式来校验身份证号码。使用正则表达式可以精确地确定身份证号码的格式是否正确,而不会误判。其中,^\d{15}$
表示身份证号码为15位数字,^\d{18}$
表示身份证号码为18位数字,^\d{17}(\d|X|x)$
表示身份证号码为17位数字加一个大写或小写字母X。
如果校验结果为false,说明输入的身份证号码格式不正确;如果校验结果为true,说明输入的身份证号码格式正确。
二、根据省市区代码进行校验
通过对身份证号码中的前6位进行解析,我们可以得到身份证号码所属的省市区信息,从而校验身份证号码的正确性。具体代码如下:
function ValidateIdCardNum(idCardNum) { // 省市区代码,来源于国家统计局官网(http://www.stats.gov.cn/) var cityCodes = { '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': '澳门', '91': '国外' }; // 提取身份证号码中的前6位 var provinceCode = idCardNum.substring(0, 2); // 判断身份证号码所属省份是否正确 if (cityCodes[provinceCode] === undefined) { return false; } else { return true; } }
上述代码中,我们使用一个对象cityCodes
记录了每个省份的代码和名称,然后提取输入的身份证号码中的前两位,判断其是否在这个对象中出现过,从而判断身份证号码是否为有效号码。
三、根据校验码进行校验
身份证号码最后一位是校验码,其计算方式为使用前17位计算出一个校验码,然后和身份证号码的最后一位进行比较。如果相同,则校验通过,否则校验失败。具体计算过程如下:
function ValidateIdCardNum(idCardNum) { // 每位数字对应的权重值 var weightFactors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 余数和余数对应的校验码 var checkCodes = { 0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2' }; // 获取身份证号码的前17位 var idCardNum17 = idCardNum.substring(0, 17); // 计算身份证号码的校验码 var sum = 0; for (var i = 0; i < 17; i++) { sum += parseInt(idCardNum17.charAt(i)) * weightFactors[i]; } var checkCode = checkCodes[sum % 11]; // 比较计算出的校验码与身份证号码的最后一位 if (checkCode === idCardNum.charAt(17)) { return true; } else { return false; } }
上述代码中,我们使用一个数组weightFactors
存储每位数字所对应的权重值,然后将身份证号码的前17位和weightFactors
中的权重值相乘,得到一个总和,然后用总和对11取模,得到一个余数。根据余数,我们可以从一个对象checkCodes
中找到对应的校验码,并比对其与身份证号码的最后一位是否一致,从而判断身份证号码是否为有效号码。
四、利用第三方库校验
除了手动编写校验方法外,我们还可以利用第三方库来进行身份证号码的校验。常用的库包括jQuery和Lodash等。具体使用方法可以查看官方文档。
例如,在使用jQuery进行身份证号码校验时,代码如下:
function ValidateIdCardNum(idCardNum) { if ($.idcard.validate(idCardNum) === false) { return false; } else { return true; } }
上述代码中,我们使用了jQuery的idcard库来进行身份证号码校验。如果校验结果为false,说明输入的身份证号码格式不正确;如果校验结果为true,说明输入的身份证号码格式正确。
五、总结
本文介绍了JavaScript实现身份证号校验的四种方法,分别为正则表达式校验、根据省市区代码进行校验、根据校验码进行校验和利用第三方库进行校验。不同的方法有不同的适用场景,我们可以根据具体情况选择合适的方法来进行身份证号码的校验。