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 相关文章推荐
jQuery1.6 使用方法一
Nov 23 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
Apr 07 Javascript
JavaScript在IE和FF下的兼容性问题
May 19 Javascript
jQuery的:parent选择器定义和用法
Jul 01 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
详谈$.data()的用法和作用
Feb 13 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
基于es6三点运算符的使用方法(实例讲解)
Oct 12 Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 Javascript
vue踩坑记录之数组定义和赋值问题
Mar 20 Javascript
微信小程序中网络请求缓存的解决方法
Dec 29 Javascript
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
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
cookie的secure属性详解
2015/04/08 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
Python解析xml中dom元素的方法
2015/03/12 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python生成器与迭代器详解
2019/01/01 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
python 字典访问的三种方法小结
2019/12/05 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
控制工程专业个人求职信
2013/09/25 职场文书
家长写给老师的建议书
2014/03/13 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
导游词之无锡古运河
2019/11/14 职场文书