当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP进阶:验证身份证号是否正确的代码

ASP
一个ASP版的图片浏览管理器
无组件上传图片至SQLSERVER数据库
利用Jmail.Message发送邮件
用Web页面执行客户端程序
多图片上传到指定的目录并存到数据库
dreamweaverMX通用分页代码研究
下拉菜单输入,根据输入内容自动定位
中文的无组件文件上传ASP函数
一个利用adsi得到局域网信息的asp文件
根据需要动态include不同的文件
让自定义文件下载支持断点续传
用数组实现数据记录的批量录入方法
上传的进度条 实时反映上传情况
用ASP动态生成javascript的表单验证代码
ASP 编程中20个非常有用的例子
ASP生成Word文档的又一方法
用asp解析图片地址,并将其保存。
利用ASP的文件操作实现用户管理
创建 Visual Basic COM 组件在 ASP 中使用
调试 ASP 中使用的 Visual Basic COM 组件

ASP进阶:验证身份证号是否正确的代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 98 ::
收藏到网摘: n/a

本文非原创,只是综合了两三个文章整理在一起的。

我们要验证身份证号是否正确,就得先了解身份证号的含意。

身份证号都代表什么意思?

1、号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

2、地址码(前六位数)
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

3、出生日期码(第七位至十四位)
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

4、顺序码(第十五位至十七位)
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

5、校验码(第十八位数)
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模
Y = mod(S, 11)
(3)通过模得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2

所以我们就可以大致写一个函数来校验是否正确了。

验证身份证号ASP代码函数如下

代码拷贝框

Function IDCheck(e)IDCheck = truearrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",")If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then'IDCheck= "身份证号共有 15 码或18位"IDCheck = FalseExit FunctionEnd IfDim AiIf Len(e) = 18 ThenAi = Mid(e, 1, 17)ElseIf Len(e) = 15 ThenAi = eAi = Left(Ai, 6) & "19" & Mid(Ai, 7, 9)End IfIf Not IsNumeric(Ai) Then'IDCheck= "身份证除最后一位外,必须为数字!"IDCheck = FalseExit FunctionEnd IfDim strYear, strMonth, strDaystrYear = CInt(Mid(Ai, 7, 4))strMonth = CInt(Mid(Ai, 11, 2))strDay = CInt(Mid(Ai, 13, 2))BirthDay = Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)If IsDate(BirthDay) ThenIf DateDiff("yyyy",Now,BirthDay)<-140 or cdate(BirthDay)>date() Then'IDCheck= "身份证输入错误!"IDCheck = FalseExit FunctionEnd IfIf strMonth > 12 Or strDay > 31 ThenIDCheck = False'IDCheck= "身份证输入错误!"Exit FunctionEnd IfElse'IDCheck= "身份证输入错误!"IDCheck = FalseExit FunctionEnd IfDim i, TotalmulAiWiFor i = 0 To 16TotalmulAiWi = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * Wi(i)NextDim modValuemodValue = TotalmulAiWi Mod 11Dim strVerifyCodestrVerifyCode = arrVerifyCode(modValue)Ai = Ai & strVerifyCodeIDCheck = AiIf Len(e) = 18 And e <> Ai Then'IDCheck= "身份证号码输入错误!"IDCheck = FalseExit FunctionEnd IfEnd Function

另外,如果能结合用户所填写的地区、生日,做相关的校验,那就更完美了。基本没有办法把这个号填错了。哈哈。除非是填别人的准确信息和身份证号