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 相关文章推荐
Firebug 字幕文件JSON地址获取代码
Oct 28 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
Oct 16 Javascript
JavaScript跨平台的开源框架NativeScript
Mar 24 Javascript
js基础知识(公有方法、私有方法、特权方法)
Nov 06 Javascript
Vue.JS入门教程之事件监听
Dec 01 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
浅谈$_FILES数组为空的原因
Feb 16 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
React学习笔记之事件处理(二)
Jul 02 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
Dec 09 Javascript
vue左右侧联动滚动的实现代码
Jun 06 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遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
jquery简单体验
2007/01/10 Javascript
javascript第一课
2007/02/27 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
使用C++扩展Python的功能详解
2018/01/12 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python实现简单flappy bird
2018/12/24 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
优秀员工演讲稿
2014/05/19 职场文书
金融管理专业求职信
2014/07/10 职场文书
委托书格式
2014/08/01 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2014年督导工作总结
2014/11/19 职场文书
师德标兵事迹材料
2014/12/19 职场文书
初中优秀学生评语
2014/12/29 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
MySQL学习必备条件查询数据
2022/03/25 MySQL