18位身份证号码验证算法

  • 格式:doc
  • 大小:39.50 KB
  • 文档页数:2

‘算法为Excel表中用VBA实现身份证号码验证。只验证身份证号码正确否,不验证是否存在此身份证号
码。算法思想可普遍适用其他地方。
Sub 身份证号码验证算法()
Dim sfzArray(1 To 18) As Integer ‘身份证号码数组,数组每个元素记录每一位号码
Dim sfzPointer As Integer’身份证位数指针,指向每一位号码
Dim checkStart As Long’需验证的起始位置,Excel中第一个身份证号码行号
Dim checkEnd As Long’需验证的最后位置,Excel中最后一个身份证号码行号
Dim checkPointer As Long’验证指针,指向验证的位置
Dim sfzSum As Integer’身份证位数求和
Dim checkWord As String’校验位
Dim initialValue As String’Excel表中身份证号码初始值

checkStart=2’根据实际情况修改
checkEnd=50000’ 根据实际情况修改
For checkPointer= checkStart To checkEnd
initialValue = CStr(Cells(checkPointer, 1))’默认Excel表第一列是身份证号码,根据实际情况修改
sfzSum = 0’初始化
For sfzPointer = 1 To 17
sfzArray(sfzPointer) = CInt(Mid(initialValue, sfzPointer, 1))’对应位赋值给身份证号码数组
Select Case sfzPointer’根据位数不同,求和
Case 1, 11
sfzSum = sfzSum + sfzArray (sfzPointer) * 7
Case 2, 12
sfzSum = sfzSum + sfzArray (sfzPointer)* 9
Case 3, 13
sfzSum = sfzSum + sfzArray (sfzPointer) * 10
Case 4, 14
sfzSum = sfzSum + sfzArray (sfzPointer) * 5
Case 5, 15
sfzSum = sfzSum + sfzArray (sfzPointer)* 8
Case 6, 16
sfzSum = sfzSum + sfzArray (sfzPointer) * 4
Case 7, 17
sfzSum = sfzSum + sfzArray (sfzPointer) * 2
Case 8
sfzSum = sfzSum + sfzArray (sfzPointer) * 1
Case 9
sfzSum = sfzSum + sfzArray (sfzPointer) * 6
Case 10
sfzSum = sfzSum + sfzArray (sfzPointer) * 3
End Select
Next sfzPointer
sfzSum = sfzSum Mod 11
Select Case sfzSum’根据求模后的余数,可得校验位
Case 0
checkWord = 1
Case 1
checkWord = 0
Case 2
checkWord = "X"
Case 3
checkWord = 9
Case 4
checkWord = 8
Case 5
checkWord = 7
Case 6
checkWord = 6
Case 7
checkWord = 5
Case 8
checkWord = 4
Case 9
checkWord = 3
Case 10
checkWord = 2
End Select
If checkWord <> UCase(Mid(initialValue, 18, 1)) Then’计算所得校验位与表中校验位比较
Range("a" & checkPointer).Interior.Color = vbRed’校验位不同,表示身份证号码不对。
Cells(checkPointer, 2) = "错误"’默认在第2列标记为错误,根据实际情况修改
Else
Cells(checkPointer, 2) = True’默认在第2列标记为正确,根据实际情况修改
End If
Next checkPointer
End Sub