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 相关文章推荐
javascript 隔行换色函数代码
Oct 24 Javascript
JavaScript入门之对象与JSON详解
Oct 21 Javascript
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
DOM基础教程之事件对象
Jan 20 Javascript
Bootstrap每天必学之进度条
Nov 30 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
详解Vue方法与事件
Mar 09 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 Javascript
详解Element-UI中上传的文件前端处理
Aug 07 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与C#分别格式化文件大小的代码
2011/05/14 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
Python with的用法
2014/08/22 Python
Python中使用PDB库调试程序
2015/04/05 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python制作词云的方法
2018/01/03 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
药剂学专业应届生自荐信
2013/09/29 职场文书
房屋转让协议书范本
2014/04/11 职场文书
七一党日活动总结
2014/07/08 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
公民授权委托书
2014/10/15 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
MySQL空间数据存储及函数
2021/09/25 MySQL
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android