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的二级联动菜单实现代码
Apr 25 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
May 25 Javascript
JavaScript中的this引用(推荐)
Aug 05 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
基于Vuejs和Element的注册插件的编写方法
Jul 03 Javascript
JS中关于正则的巧妙操作
Aug 31 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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
浅析is_writable的php实现
2013/06/18 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
jQuery中DOM操作实例分析
2015/01/23 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
python字符串中的单双引
2017/02/16 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
Form表单及django的form表单的补充
2019/07/25 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
JPA的优势都有哪些
2013/07/04 面试题
2014年安全生产大检查方案
2014/05/13 职场文书
敬老院标语
2014/06/27 职场文书
食品药品安全责任书
2015/05/11 职场文书
整脏治乱工作简报
2015/07/21 职场文书