详解身份证验证规则 |
您所在的位置:网站首页 › 18位身份证号编码规则 › 详解身份证验证规则 |
今天来说说身份证验证规则到底是怎么验证的,原理是什么,希望看完本篇你能正确的去理解身份证验证背后的规则。 身份证号码的编码规则身份证号码共18位,由17位本体码和1位校验码组成。 身份证最后一位是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。 前6位是地址码,表示登记户口时所在地的行政区划代码,依照《中华人民共和国行政区划代码》国家标准(GB/T2260)的规定执行; 7到14位是出生年月日,采用YYYYMMDD格式; 15到17位是顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性,即第17位奇数表示男性, 偶数表示女性;第18位是校验码,采用ISO 7064:1983, MOD 11-2校验字符系统,计算规则下一章节说明。一代身份证与二代身份证的区别在于: 一代身份证是15位,二代身份证是18位; 一代身份证出生年月日采用YYMMDD格式,二代身份证出生年月日采用YYYYMMDD格式; 一代身份证无校验码,二代身份证有校验码。 校验码计算规则身份证号码中各个位置上的号码字符值应满足下列公式的校验: ![]() ![]() ![]() 下面通过两种方法用某个真实的男性身份证号(5 3 3 2 2 3 1 9 6 3 0 1 0 5 0 9 1 7)来进行通俗易懂的说明身份证验证规则。 方法一(余数对应法) 方法二(十八位加权余一法) 按照18位来计算,第一位数的权重是07,第二位是09(见下表)序号从右向左,只要最后的加权和除以11,余数只要是1,那么身份证号码就是正确的。 注意:如果身份证号码第18位是X,那么就按10计算。 其中5 X 7=35,3 X 9=27,3 X 10=30,其余以此类推,加权求和=35+27+30…..2+7=265;265 % 11其余数是1,所以这个号码是正确的。 用JS实现二代身份证的验证理解了原理和校验规则开始下手敲起来: /** * 以下身份证验证适用于18位的二代身份证号码,身份证通常是由17位本体码和1位校验码组成。 **/ function validateIdCard(idCard) { //15位和18位身份证号码的正则表达式 var regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/; //如果通过该验证,说明身份证格式正确,但准确性还需计算 if (regIdCard.test(idCard)) { if (idCard.length == 18) { var idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //将前17位加权因子保存在数组里 var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2); //这是除以11后,可能产生的11位余数、验证码,也保存成数组,10代表X var idCardWiSum = 0; //用来保存前17位各自乖以加权因子后的总和 for (var i = 0; i转载规则 ![]() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |