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 调用百度地图api并在地图上进行打点添加标注
May 13 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
Jul 09 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
Sep 04 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
js 实现省市区三级联动菜单效果
Feb 20 Javascript
详解vue-router基本使用
Apr 18 Javascript
js replace 全局替换的操作方法
Jun 12 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
Aug 29 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,ajax实现分页
2008/03/27 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
解析js如何获取css样式
2016/12/11 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
用pickle存储Python的原生对象方法
2017/04/28 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
营销总经理的岗位职责
2013/12/15 职场文书
学生励志演讲稿
2014/01/06 职场文书
意向书范文
2014/03/31 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
检讨书之工作不认真
2019/08/14 职场文书