|
本帖最后由 474589791 于 2011-12-14 21:43 编辑
身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。
代码如下:
Function IDcheck(ID) '身份证号码校验函数
Dim s, i As Integer
Dim e, z As String
Part1: '----------------------------身份证号码合法性检查---------------------------------------
If Not (Len(ID) = 18 Or Len(ID) = 15) Then '位数检验
IDcheck = "位数错误"
Exit Function
Else
If 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 Function
End If
On 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 Then
IDcheck = "日期错误"
Exit Function
End If
End If
Part2: '-----------------------------校验码的生成及检查----------------------------------------
s = 0
For i = 1 To 17
s = s + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11)
Next
e = Mid("10X98765432", (s Mod 11) + 1, 1) '生成校验码
If Len(ID) = 18 Then
z = UCase(Right(ID, 1))
If z = e Then '校验码对比
IDcheck = "通过"
Else
IDcheck = "校验未通过" '如果要返回校验码,请把本行语句改为:IDcheck = e
End If
Else
IDcheck = ID & e '15位身份证号码升位
End If
End Function '编写 474589791 2011年6月11日
使用方法:
一、建立函数
1、打开excel,点击菜单的“工具→宏→录制新宏”,弹出录制新宏对话框。
2、在“保存在”下面选择“个人宏工作簿”,点击确定。(选择个人宏工作簿有2大好处:①使本函数可应用于当前计算机中所有的excel工作表;②不受宏安全性设置高低的影响。)
3、在弹出的录制宏工具中点击“停止录制”按钮,结束宏的录制。
4、点击菜单的“工具→宏→Visual Basic 编辑器”,打开编辑器。
5、在编辑器中可以看到刚才录制的代码“Sub macrol() ”,还有录制时间等内容。选中编辑器中的代码并删除。
注:如果编辑器中没有出现PERSONAL.XLS - 模块1(代码),请在左边“工程资源管理器”中找到PEROSNAL.XLS下面的模块1并双击。
6、把以上代码复制到编辑器中,保存并退出编辑器。至此,你就可以使用本函数了。
二、函数的使用
1、打开名册,点击身份证号码后面用于存放校验结果的空白单元格,点击插入函数按钮 fx ,弹出插入函数对话框。
2、在“选择类别”中选择“用户定义”类。
3、可以看到“选择函数”下面出现了刚才保存的 PERSONAL.XLS!IDcheck 函数,选中该函数,点击确定按钮,弹出“函数参数”对话框。
4、点击工作表上对应的身份证号码单元格(下图为A2单元格),点击“确定”按钮。
5、然后向下填充,得到其他身份证号码的检验结果。
|
评分
-
5
查看全部评分
-
|