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处理table表格的代码
Dec 06 Javascript
jquery模拟SELECT下拉框取值效果
Oct 23 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
Mar 27 Javascript
基于JS实现EOS隐藏错误提示层代码
Apr 25 Javascript
Google 地图叠加层实例讲解
Aug 06 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
Aug 03 Javascript
angularjs实现天气预报功能
Jun 16 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
JS实现的贪吃蛇游戏完整实例
Jan 18 Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 Javascript
VUE递归树形实现多级列表
Jul 15 Vue.js
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的网址
2006/11/25 PHP
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
vue中轮训器的使用
2019/01/27 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
python实现excel读写数据
2021/03/02 Python
python实现剪切功能
2019/01/23 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
Django多个app urls配置代码实例
2020/11/26 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
教师绩效考核方案
2014/01/21 职场文书
铲车司机岗位职责
2014/03/15 职场文书
求职意向书
2014/04/01 职场文书
体育部部长竞选稿
2015/11/21 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers