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 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
Javascript 键盘keyCode键码值表
Dec 24 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
Nov 01 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
详解webpack4升级指南以及从webpack3.x迁移
Jun 12 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 Javascript
JS实现获取自定义属性data值的方法示例
Dec 19 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 Javascript
JS Array.from()将伪数组转换成数组的方法示例
Mar 23 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
1.PHP简介
2006/10/09 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
用python实现一个简单的验证码
2020/12/09 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
酒店应聘自荐信
2013/11/09 职场文书
公司培训心得体会
2014/01/03 职场文书
法学专业自我鉴定
2014/02/05 职场文书
工作决心书范文
2014/03/11 职场文书
公司年会策划方案
2014/05/17 职场文书
公务员诚信承诺书
2014/05/26 职场文书
村党组织公开承诺书
2015/04/30 职场文书
给校长的建议书作文400字
2015/09/14 职场文书