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 作用域使用说明
Aug 13 Javascript
一些技巧性实用js代码小结
Oct 14 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
Oct 01 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
详解如何在vue项目中引入elementUI组件
Feb 11 Javascript
微信小程序实现简单评论功能
Nov 28 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
May 21 Javascript
react 组件传值的三种方法
Jun 03 Javascript
jQuery实现手风琴特效
Jan 11 jQuery
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程序的php代码
2008/04/07 PHP
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
React 实现车牌键盘的示例代码
2019/12/20 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
Python使用进程Process模块管理资源
2020/03/05 Python
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
高中军训广播稿
2014/01/14 职场文书
创业计划书之废品回收
2019/09/26 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS