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 相关文章推荐
JS宝典学习笔记(下)
Jan 10 Javascript
js变量、作用域及内存详解
Sep 23 Javascript
jQuery 回调函数(callback)的使用和基础
Feb 26 Javascript
JavaScript的代码编写格式规范指南
Dec 07 Javascript
jQuery Form表单取值的方法
Jan 11 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
解决layui富文本编辑器图片上传无法回显的问题
Sep 18 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
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中防止SQL注入实现代码
2011/02/19 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
js数组的基本使用总结
2021/01/18 Javascript
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
10张动图学会python循环与递归问题
2021/02/06 Python
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
学生保证书范文
2014/04/28 职场文书
谢师宴邀请函
2015/02/02 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
2016新年感言
2015/08/03 职场文书
教师培训学习心得体会
2016/01/21 职场文书
2016年五一促销广告语
2016/01/28 职场文书
辞职申请书范本
2019/05/20 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js