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 相关文章推荐
js event事件的传递与冒泡处理
Dec 06 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
Jun 14 Javascript
使用jquery读取html5 localstorage的值的方法
Jan 04 Javascript
关于JS中的闭包浅谈
Aug 23 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
Aug 02 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
js省市区级联查询(插件版&无插件版)
Mar 21 Javascript
基于Vue过渡状态实例讲解
Sep 14 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
Python聊天室程序(基础版)
2018/04/01 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python实现决策树分类
2018/08/30 Python
基于python实现百度翻译功能
2019/05/09 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
python3中确保枚举值代码分析
2020/12/02 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
银行毕业实习自我鉴定
2013/09/19 职场文书
财务助理岗位职责
2013/11/10 职场文书
医药个人求职信范文
2014/01/29 职场文书
房屋委托书范本
2014/04/04 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
MySQL查询日期时间
2022/05/15 MySQL