关闭

js实现二代身份证号码验证详解

130人阅读 评论(0) 收藏 举报

/*
根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
 地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
 出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
 顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
 校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
 
出生日期计算方法。
位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19或18,这样就包含了所有1800-1999年出生的人;
年后出生的肯定都是18位的了没有这个烦恼,至于1800年前出生的,那啥那时应该还没身份证号这个东东,⊙﹏⊙b汗...
下面是正则表达式:
 出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])
 身份证正则表达式 /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i
位校验规则 6位地址编码+6位出生日期+3位顺序号
位校验规则 6位地址编码+8位出生日期+3位顺序号+1位校验位
 
校验位规则 公式:∑(ai×Wi)(mod 11)……………………………………(1)
公式(1)中:
i----表示号码字符从由至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,其数值依据公式Wi=2^(n-1)(mod 11)计算得出。
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
 Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
 
*/
//身份证号合法性验证
//支持15位和18位身份证号
//支持地址编码、出生日期、校验位验证
function IdentityCodeValid(code) {
var city={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:"国外 "};
var tip = "";
 var pass= true;

 if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
 tip = "身份证号格式错误";
pass = false;
 }

 else if(!city[code.substr(0,2)]){
 tip = "地址编码错误";
pass = false;
 }
 else{
 //18位身份证需要验证最后一位校验位
if(code.length == 18){
 code = code.split('');
 //∑(ai×Wi)(mod 11)
 //加权因子
var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
 //校验位
var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
 var sum = 0;
 var ai = 0;
 var wi = 0;
 for (var i = 0; i < 17; i++)
 {
 ai = code[i];
 wi = factor[i];
 sum += ai * wi;
 }
 var last = parity[sum % 11];
 if(parity[sum % 11] != code[17]){
 tip = "校验位错误";
pass =false;
 }
 }
 }
 if(!pass) alert(tip);
 return pass;
 }
 var c = '130981199312253466';
 var res= IdentityCodeValid(c);
0
0
查看评论

js完美实现身份证号的有效验证

最近的前台验证比较多,自然要求也比较高,毕竟是网站上需要的一些东西。      之前做验证身份证号好像一直是验证位数够不够,如果够,则ok,这种简单的验证已经不符合现在的合法性要求了。因为身份证号是根据规则定出来的,所以,必然有相应的规则去验证它,下边是代码的分享: /...
  • u012788601
  • u012788601
  • 2016-11-13 22:36
  • 789

正则实现二代身份证号码验证详解

最近项目需要对身份证进行比较合理的筛选,并不想用到第三方接口,所以写了个方法: 包括支持身份证号合法性验证, 支持18位身份证号,支持地址编码、出生日期、校验位验证
  • wuchengzeng
  • wuchengzeng
  • 2017-03-27 11:38
  • 4559

JavaScript实现二代身份证号码转一代身份证号码

使用JavaScript实现一代身份证号码转二代身份证号码
  • yangzhijun_cau
  • yangzhijun_cau
  • 2010-06-21 16:28
  • 4223

C#验证二代身份证号码

身份证号码的验证及15位升18位算法 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码&...
  • hc1104
  • hc1104
  • 2012-10-31 01:12
  • 770

身份证号码的规则及验证原理

 身份证号码的规则及验证原理   【身份证号码的规则】 1、15位身份证号码组成: ddddddyymmddxxs共15位,其中: dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。 yy为2位的年份代码,是身份证持有人的出身年份。 ...
  • cd_liuglobal
  • cd_liuglobal
  • 2015-05-09 21:11
  • 1087

前端身份证号码校验js代码

今天把项目前端的身份证号码从最初的只是校验长度改为只允许正规的号码,具体内容如下 功能主要校验  年月日 地址  格式  以及最后一位的校验 var code="123132132121" var ...
  • wmcaogaoben
  • wmcaogaoben
  • 2017-08-31 12:57
  • 430

js实现身份证号码验证

以下是根据身份证号码编码规则,使用JS对其进行有效性验证代码IdCard-Validate.js代码如下: /** * 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * p: ...
  • oxcow
  • oxcow
  • 2009-05-08 22:09
  • 4467

js实现身份证号码验证

以下是根据身份证号码编码规则,使用JS对其进行有效性验证代码 IdCard-Validate.js代码如下:   /**   * 身份证15位编码规则:dddddd yymmdd xx p    * dddddd:地区码&#...
  • c0hui
  • c0hui
  • 2013-04-15 09:48
  • 282

JS验证身份证号码正确性

function checkIdcard(idcard) { var Errors = new Array( "验证通过!", "请输入18位身份证号!", "身份证号码出生日期超出范围或含有非...
  • haukwong
  • haukwong
  • 2015-08-11 19:32
  • 1006

身份证号验证正则表达式

一些要求用户信息比较严格的地方比如用户注册、登录的时候都需要验证用户的身份证是否合法,而通过这些验证能大大的过滤掉很多水客,给你的系统带来非常精准的用户信息。  很多时候我们都是通过一组正则表达式来判断用户输入的身份证是否合法,那在用正则表达式判断之前,你对身份证号的组成有多少了解呢?下面来说说一个...
  • huangxingchen123
  • huangxingchen123
  • 2016-09-14 10:37
  • 3107
    个人资料
    • 访问:7546次
    • 积分:387
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:22篇
    • 译文:0篇
    • 评论:1条