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 相关文章推荐
Javascript的setTimeout()使用闭包特性时需要注意的问题
Sep 23 Javascript
JQuery选择器绑定事件及修改内容的方法
Jan 23 Javascript
node.js调用C++开发的模块实例
Jul 03 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
Jquery实现上下移动和排序代码
Oct 17 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
Mar 07 Javascript
微信小程序 navbar实例详解
May 11 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
javascript中toFixed()四舍五入使用方法详解
Sep 28 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 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
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
JS常用算法实现代码
2016/11/14 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
Python中的单继承与多继承实例分析
2018/05/10 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Python调用C语言的实现
2019/07/26 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
UNIX文件类型
2013/08/29 面试题
仓库规划计划书
2014/04/28 职场文书
农村党员对照检查材料
2014/09/24 职场文书
毕业实习单位意见
2015/06/04 职场文书
小学运动会宣传稿
2015/07/23 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
MySQL系列之十一 日志记录
2021/07/02 MySQL
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript