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 相关文章推荐
jQuery使用手册之二 DOM操作
Mar 24 Javascript
ajaxControlToolkit AutoCompleteExtender的用法
Oct 30 Javascript
javascript利用初始化数据装配模版的实现代码
Nov 17 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
jquery操作select方法汇总
Feb 05 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
全面解析Bootstrap表单样式的使用
Sep 09 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
JavaScript事件方法(实例讲解)
Jun 27 Javascript
javascript实现多边形碰撞检测
Oct 24 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
摩卡咖啡
2021/03/03 咖啡文化
php中文字符截取防乱码
2008/03/28 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python流程控制 if else实现解析
2019/09/02 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
详解pandas赋值失败问题解决
2020/11/29 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
super关键字的用法
2012/04/10 面试题
模特大赛策划方案
2014/05/28 职场文书
公民授权委托书范本
2014/09/17 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
2014年导购员工作总结
2014/11/18 职场文书
老乡会致辞
2015/07/28 职场文书