身份证信息处理是我们将遇到的需求,其中一个就是对于身份证号码有效性的验证。有一次我妻子学校让班主任核对学生提交的家庭成员身份证信息的准确性。按之前的方式,全班几十个学生,挨个家长打电话,一遍下来半天也就没了。这还不算电话打不通的,打通了身份证号记不住的。于是我就给她做了身份证号有效性识别的功能。先程序核对一遍,剩下的只是确认身份证证号无效的,这样效率一下就提高了几十倍。
如何识别身份证号码是否有效?
身份证号码的最后一位是校验码,校验的具体公式和详细要求大家可以自行百度。不求甚解的朋友也完全可以忽略具体规则。直接Copy我的代码就行。
简单的来说就是将前17为分别乘以7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2,然后将乘积求和再除以11,余数可能有0 1 2 3 4 5 6 7 8 9 10,分别应该对应身份证最后一位的1 0 X 9 8 7 6 5 4 3 2。如果能够对应,身份证号码就是对的,如果不对应那就肯定是写错了。
创建身份证号码校验函数
第一步我们需要创建一个身份证号码的校验函数,这样方便我们批量判断身份证有效时进行调用。
Function IDcheck(ID As String) '判断身份证号是否正确的自定义函数
Dim intSum, i As Long
Dim strVerify, strEnd As String
intSum = 0
If Len(ID) = 18 Then '在这里,为了使代码看着简洁,我们仅考虑18位身份证号,15位的暂不考虑
For i = 1 To 17
intSum = intSum + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11) '对身份证号前17位分别乘以系数,并求和
Next
strVerify = Mid("10X98765432", (intSum Mod 11) + 1, 1) '计算检验码
strEnd = UCase(Right(ID, 1)) '获取身份证最后1位
If strEnd = strVerify Then '如果计算的校验码与最后一位相同则为有效的身份证号
IDcheck = "正确"
Else
IDcheck = "无效的身份证号"
End If
End If
End Function
有了自定义函数,我们就已经可以直接在工作表中调用函数了。如果想更方便的使用可以构造一个窗体。也可以直接从的第一篇文章《超实用Excel VBA工具箱0-零基础学代码其实很简单》中下载使用。