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在XHTML中的用法详解
Apr 11 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
angularjs中回车键触发某一事件的方法
Apr 24 Javascript
JavaScript实现反转字符串的方法详解
Apr 27 Javascript
详解微信小程序中的页面代码中的模板的封装
Oct 12 Javascript
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
如何检查一个对象是否为空
Apr 11 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
Aug 20 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
Aug 28 Javascript
nginx部署多个vue项目的方法示例
Sep 06 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+MySQL实现的简单投票系统实例
2016/02/24 PHP
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
javascript常用的方法整理
2015/08/20 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
express express-session的使用小结
2018/12/12 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python自省及反射原理实例详解
2020/07/06 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
《鸿门宴》教学反思
2014/04/22 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
单位介绍信格式范文
2015/05/04 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
社团招新宣传语
2015/07/13 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang