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 相关文章推荐
ExtJS扩展 垂直tabLayout实现代码
Jun 21 Javascript
javascript 面向对象编程 万物皆对象
Sep 17 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
Jul 08 Javascript
收集的10个免费的jQuery相册
Feb 26 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
Websocket协议详解及简单实例代码
Dec 12 Javascript
Vue.js常用指令的使用小结
Jun 23 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
手把手带你封装一个vue component第三方库
Feb 14 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 透明水印生成代码
2012/08/27 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
js实现弹框效果
2021/03/24 Javascript
采购员的工作职责
2013/12/26 职场文书
我为自己代言广告词
2014/03/18 职场文书
政治表现评语
2014/05/04 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
导游词之山海关
2019/12/10 职场文书