js身份证验证超强脚本


Posted in Javascript onOctober 26, 2008

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];
alert(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];
alert(Errors[0]);
else return Errors[2];
alert(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];
alert(Errors[3]);
}
else return Errors[2];
alert(Errors[2]);
break;
default:
return Errors[1];
alert(Errors[1]);
break;
}
}

Javascript 相关文章推荐
Google Map Api和GOOGLE Search Api整合实现代码
Jul 18 Javascript
在JS中如何调用JSP中的变量
Jan 22 Javascript
AngularJS手动表单验证
Feb 01 Javascript
Javascript数组Array基础介绍
Mar 13 Javascript
简单实现js悬浮导航效果
Feb 05 Javascript
requirejs + vue 项目搭建详解
Jun 16 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
ES6扩展运算符的用途实例详解
Aug 20 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 Javascript
Vue安装浏览器开发工具的步骤详解
May 12 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
小程序实现密码输入框
Nov 16 Javascript
javascript引导程序
Oct 26 #Javascript
javascript笔试题目附答案@20081025_jb51.net
Oct 26 #Javascript
Div自动滚动到末尾的代码
Oct 26 #Javascript
Firefox getBoxObjectFor getBoundingClientRect联系
Oct 26 #Javascript
js判断变量是否空值的代码
Oct 26 #Javascript
Prototype使用指南之selector.js说明
Oct 26 #Javascript
prototype Element学习笔记(Element篇三)
Oct 26 #Javascript
You might like
Smarty安装配置方法
2008/04/10 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
python中enumerate函数用法实例分析
2015/05/20 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
介绍信的写法
2015/01/31 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书