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 相关文章推荐
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
jquery实现网页查找功能示例分享
Feb 12 Javascript
js实现的点击数量加一可操作数据库
May 09 Javascript
JavaScript中计算网页中某个元素的位置
Jun 10 Javascript
JavaScript的设计模式经典之建造者模式
Feb 24 Javascript
浅析Bootstrap缩略图组件与警示框组件
Apr 29 Javascript
JavaScript必知必会(十) call apply bind的用法说明
Jun 08 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
Dec 08 Javascript
AngularJS中controller控制器继承的使用方法
Nov 03 Javascript
Angular浏览器插件Batarang介绍及使用
Feb 07 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 Javascript
Vue全局事件总线你了解吗
Feb 24 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
js 创建书签小工具之理论
2011/02/25 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python实现异步回调机制代码分享
2014/01/10 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Django admin美化插件suit使用示例
2017/12/12 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
详解Flask前后端分离项目案例
2020/07/24 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
锅炉工岗位职责
2015/02/13 职场文书
医生个人年度总结
2015/02/28 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL