JS验证身份证有效性示例


Posted in Javascript onOctober 11, 2013
function checkIdcard(idcard){ 
var Errors=new Array( 
"验证通过", 
"身份证号码位数不对!", 
"身份证号码出生日期超出范围或含有非法字符!", 
"身份证号码校验错误!", 
"身份证地区非法!" 
); 
var area={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 idcard,Y,JYM; 
var S,M; 
var idcard_array = new Array(); 
idcard_array = idcard.split(""); 
//地区检验 
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4]; 
//身份号码位数及格式检验 
switch(idcard.length){ 
case 15: 
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ 
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性 
} else { 
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性 
} 
if(ereg.test(idcard)) return Errors[0]; 
else return Errors[2]; 
break; 
case 18: 
//18位身份号码检测 
//出生日期的合法性检查 
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9])) 
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8])) 
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){ 
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式 
} else { 
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式 
} 
if(ereg.test(idcard)){//测试出生日期的合法性 
//计算校验位 
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 
+ parseInt(idcard_array[7]) * 1 
+ parseInt(idcard_array[8]) * 6 
+ parseInt(idcard_array[9]) * 3 ; 
Y = S % 11; 
M = "F"; 
JYM = "10X98765432"; 
M = JYM.substr(Y,1);//判断校验位 
if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位 
else return Errors[3]; 
} 
else return Errors[2]; 
break; 
default: 
return Errors[1]; 
break; 
} 
}
Javascript 相关文章推荐
jquery无刷新验证邮箱地址实现实例
Feb 19 Javascript
JS清空多文本框、文本域示例代码
Feb 24 Javascript
网页广告中JS代码的信息监听示例
Apr 02 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
Jan 04 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
AngularJS实现ajax请求的方法
Nov 22 Javascript
微信小程序提交form操作示例
Dec 30 Javascript
vue操作dom元素的3种方法示例
Sep 20 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
Nov 12 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
JS分页效果示例
Oct 11 #Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 #Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 #Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 #Javascript
javascript自然分类法算法实现代码
Oct 11 #Javascript
jQuery阻止事件冒泡具体实现
Oct 11 #Javascript
JS定时器实例详细分析
Oct 11 #Javascript
You might like
理解php原理的opcodes(操作码)
2010/10/26 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
php递归函数怎么用才有效
2018/02/24 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
试述DBMS的主要功能
2016/11/13 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
营销总经理岗位职责
2014/02/02 职场文书
一分钟演讲稿
2014/04/30 职场文书
自主招生教师推荐信
2014/05/10 职场文书
银行求职信
2014/05/31 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
MySQL sql_mode的使用详解
2021/05/08 MySQL
拙作再改《我的收音机情缘》
2022/04/05 无线电