分享

VBA身体证检验,收好了!

 L罗乐 2018-01-21

身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。


(一)VBA代码

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   




(二)使用方法:
1、打开Excel

2、按快捷键Alt F11

3、新建模块,复制代码



4、使用函数IdCheck()

像普通函数一样使用它。




(三)使用它,再也不怕输错身份证,被老板骂了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多