javascript或asp实现的判断身份证号码是否正确两种验证方法


Posted in Javascript onNovember 26, 2009

具体代码如下:

一、用javascript验证:

<script> 
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]; 
//身份号码位数及格式检验 
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]; 
else return 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]; 
} 
else return Errors[2]; 
break; 
default: 
return Errors[1]; 
break; 
} 
} 
alert(checkIdcard("220183198808081610")) 
</script>

二、通过asp代码验证:
<% 
Function checkIDCard(idcard) '-1为正确的身份证,否则为非法身份证 Dim Y, JYM 
Dim S, M 
Dim area 
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" 
Dim ereg 
Set ereg = New regexp 
'地区检验 
If InStr(1, area, Mid(idcard, 1, 2)) = 0 Then checkIDCard = 1: Exit Function 
'身份号码位数及格式检验 
Select Case Len(idcard) 
Case 15 
If ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0 or ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 100 = 0 And (CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0)) Then 
ereg.Pattern = "^[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.Pattern = "^[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}$" ';//测试出生日期的合法性 
End If 
If (ereg.test(idcard)) Then 
checkIDCard = -1 
Else 
checkIDCard = 2 
End If 
Case 18 
'//18位身份号码检测 
'//出生日期的合法性检查 
If ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0 or ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 100 = 0 And (CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0)) Then 
ereg.Pattern = "^[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.Pattern = "^[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]$" ';//平年出生日期的合法性正则表达式 
End If 
If (ereg.test(idcard)) Then 
'//计算校验位 
S = (CInt(Mid(idcard, 0 + 1, 1)) + CInt(Mid(idcard, 10 + 1, 1))) * 7 _ 
+ (CInt(Mid(idcard, 1 + 1, 1)) + CInt(Mid(idcard, 11 + 1, 1))) * 9 _ 
+ (CInt(Mid(idcard, 2 + 1, 1)) + CInt(Mid(idcard, 12 + 1, 1))) * 10 _ 
+ (CInt(Mid(idcard, 3 + 1, 1)) + CInt(Mid(idcard, 13 + 1, 1))) * 5 _ 
+ (CInt(Mid(idcard, 4 + 1, 1)) + CInt(Mid(idcard, 14 + 1, 1))) * 8 _ 
+ (CInt(Mid(idcard, 5 + 1, 1)) + CInt(Mid(idcard, 15 + 1, 1))) * 4 _ 
+ (CInt(Mid(idcard, 6 + 1, 1)) + CInt(Mid(idcard, 16 + 1, 1))) * 2 _ 
+ CInt(Mid(idcard, 7 + 1, 1)) * 1 _ 
+ CInt(Mid(idcard, 8 + 1, 1)) * 6 _ 
+ CInt(Mid(idcard, 9 + 1, 1)) * 3 
Y = S Mod 11 
M = "F" 
JYM = "10X98765432" 
M = Mid(JYM, Y + 1, 1) 
If (M = Mid(idcard, 17 + 1, 1)) Then checkIDCard = -1 Else checkIDCard = 3 
Else 
checkIDCard = 4 
End If 
Case Else 
checkIDCard = Len(idcard) 
End Select 
End Function%>
Javascript 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
javascript实现自动输出文本(打字特效)
Aug 27 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
jQuery根据表单name获取值的方法
May 24 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
关于express与koa的使用对比详解
Jan 25 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 Javascript
vue v-model动态生成详解
Jun 30 Javascript
微信小程序页面间跳转传参方式总结
Jun 13 Javascript
JQuery常用简单动画操作方法回顾与总结
Dec 07 jQuery
Ext grid 添加右击菜单
Nov 26 #Javascript
JS 判断undefined的实现代码
Nov 26 #Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 #Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 #Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 #Javascript
文本框的字数限制功能jquery插件
Nov 24 #Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
Nov 24 #Javascript
You might like
对javascript和select部件的结合运用
2006/10/09 PHP
PR值查询 | PageRank 查询
2006/12/20 PHP
收集的DedeCMS一些使用经验
2007/03/17 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
PHP加密解密类实例分析
2015/04/20 PHP
Javascript浅谈之this
2013/12/17 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
家具促销活动方案
2014/02/16 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
运动会1000米加油稿
2015/07/21 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python