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


Posted in Javascript onNovember 20, 2014

废话少说,直接上代码,注释里解析的很清楚了,这里就不BB了。

/*

根据〖中华人民共和国国家标准 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);

怎么样,非常全面第一个身份证号码验证代码吧,和网上搜来的其他验证代码简直不是一个次元的,小伙伴们需要的直接拿走用吧。

Javascript 相关文章推荐
收藏一些不常用,但是有用的代码
Mar 12 Javascript
javascript 动态调整图片尺寸实现代码
Dec 28 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
Node.js包管理器Yarn的入门介绍与安装
Oct 17 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
Jul 09 Javascript
Vue实现点击后文字变色切换方法
Feb 11 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 21 Javascript
原生js实现贪吃蛇游戏
Oct 26 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 #Javascript
javascript获取flash版本号的方法
Nov 20 #Javascript
Jquery对象和Dom对象的区别分析
Nov 20 #Javascript
深入理解javascript变量声明
Nov 20 #Javascript
javascript限制用户只能输汉字中文的方法
Nov 20 #Javascript
jQuery 中$(this).index与$.each的使用指南
Nov 20 #Javascript
jQuery提示效果代码分享
Nov 20 #Javascript
You might like
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
js控制CSS样式属性语法对照表
2012/12/11 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
python中Apriori算法实现讲解
2017/12/10 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
python使用udp实现聊天器功能
2018/12/10 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
python实现猜拳小游戏
2020/04/05 Python
Python通过format函数格式化显示值
2020/10/17 Python
Python可以用来做什么
2020/11/23 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
高中课前三分钟演讲稿
2014/08/18 职场文书
学校国庆节活动总结
2015/03/23 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏