18位身份证号码验证算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

‘算法为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 initialV alue As String’Excel表中身份证号码初始值

checkStart=2’根据实际情况修改

checkEnd=50000’根据实际情况修改

For checkPointer= checkStart To checkEnd

initialV alue = CStr(Cells(checkPointer, 1))’默认Excel表第一列是身份证号码,根据实际情况修改

sfzSum = 0’初始化

For sfzPointer = 1 To 17

sfzArray(sfzPointer) = CInt(Mid(initialV alue, 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 sfzS um’根据求模后的余数,可得校验位

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(initialV alue, 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

相关文档
最新文档