身份证号码校验实例身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。
在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。
根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。
代码如下:Function IDcheck(ID) '身份证号码校验函数Dim s, iAs IntegerDim e, z As StringPart1: '----------------------------身份证号码合法性检查---------------------------------------If Not (Len(ID) = 18 Or Len(ID) = 15) Then '位数检验IDcheck = "位数错误"Exit FunctionElseIf Len(ID) = 15 Then ID = Left(ID, 6) & "19" & Right(ID, 9)If IsNumeric(Left(ID, 17)) = False Or InStr(ID, ".") > 0 Then '字符检验IDcheck = "字符错误"Exit FunctionEnd IfOn Error Resume Next '日期检验If DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) < 1 Or _DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) > Date ThenIDcheck = "日期错误"Exit FunctionEnd IfEnd IfPart2: '-----------------------------校验码的生成及检查---------------------------------------- s = 0For i = 1 To 17s = s + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11)Nexte = Mid("10X98765432", (s Mod 11) + 1, 1) '生成校验码If Len(ID) = 18 Thenz = UCase(Right(ID, 1))If z = e Then '校验码对比IDcheck = "通过"ElseIDcheck = "校验未通过" '如果要返回校验码,请把本行语句改为:IDcheck = e End IfElseIDcheck = ID & e '15位身份证号码升位End IfEnd Function '编写 474589791 2011年6月11日使用方法:一、建立函数1、打开excel,点击菜单的“工具→宏→录制新宏”,弹出录制新宏对话框。