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 相关文章推荐
ExtJs使用总结(非常详细)
Mar 22 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
Javascript技术栈中的四种依赖注入小结
Feb 27 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
基于JavaScript实现前端文件的断点续传
Oct 17 Javascript
vscode中vue-cli项目es-lint的配置方法
Jul 30 Javascript
微信小程序动态添加view组件的实例代码
May 23 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 Javascript
如何使用JS console.log()技巧提高工作效率
Oct 14 Javascript
node中使用shell脚本的方法步骤
Mar 23 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 Javascript
浅析JavaScript中的变量提升
Jun 01 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字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
微信支付开发交易通知实例
2016/07/12 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
性能服装:HYLETE
2018/08/14 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
公司大门门卫岗位职责
2014/06/11 职场文书
关于军训的感想
2015/08/07 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript