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 相关文章推荐
一个无限级XML绑定跨框架菜单(For IE)
Jan 27 Javascript
DOM 基本方法
Jul 18 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
javascript实现页面内关键词高亮显示代码
Apr 03 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
JQuery操作textarea,input,select,checkbox方法
Sep 02 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
详解Angular.js指令中scope类型的几种特殊情况
Feb 21 Javascript
浅谈JS如何实现真正的对象常量
Jun 25 Javascript
ajax请求data遇到的问题分析
Jan 18 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
用PHP4访问Oracle815
2006/10/09 PHP
PHP新手上路(七)
2006/10/09 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
jquery表单验证使用插件formValidator
2012/11/10 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
用Python编写web API的教程
2015/04/30 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
纪律教育月活动总结
2014/08/26 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
李白故里导游词
2015/02/12 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
MySQL数据库 安全管理
2022/05/06 MySQL