该函数可以用于校验身份证号码信息是否正确,可以用于excel的VBA自定义函数中。
使用方法,复制以下代码到VBE编辑器中,然后在工作表单元格输入 =xzw_身份证校验(sid, 性别) 即可完成校验。
代码如下:
Public Function xzw_身份证校验(sid, 性别)
'1、身份证不满 15 位,2、性别与身份证不符,3、出生月份出错(不在 1‐12)'4、出生日期出错(不在 1‐31 范围内),5、18 位校验位出错,6、18 位身份证年份出借
On Error Resume Next
Dim s1, s2, jym, x
If 性别 = 1 Then x = 1
If 性别 = "男" Then x = 1
If 性别 = 2 Then x = 0
If 性别 = "女" Then x = 0
s1 = " 7 910 5 8 4 2 1 6 3 7 910 5 8 4 2"
s2 = "10x98765432"
If Len(sid) <> 15 And Len(sid) <> 18 Then
xzw_身份证校验 = "身份证位数错误"
'测试 15 位身份证的信息
ElseIf Len(sid) = 15 And Val(Mid(sid, 7, 2)) < 10 Then
xzw_身份证校验 = "年龄好大,请多多保重!"
ElseIf Len(sid) = 15 And Val(Mid(sid, 9, 2)) > 12 Then
xzw_身份证校验 = "出生月份错误!"
ElseIf Len(sid) = 15 And Val(Mid(sid, 11, 2)) > 31 Then
xzw_身份证校验 = "出生日期错误!"
ElseIf Len(sid) = 15 And Mid(sid, 15, 1) Mod 2 <> x Then
xzw_身份证校验 = "性别错误!"
ElseIf Len(sid) = 15 Then
newid = Left(sid, 6) + "19" + Right(sid, 9)
jym = 0
For i = 1 To 17
jym = jym + Val(Mid(s1, i * 2 - 1, 2)) * Val(Mid(newid, i, 1))
Next i
xzw_身份证校验 = newid + Mid(s2, jym Mod 11 + 1, 1)
'测试 18 位身份证的信息
ElseIf Len(sid) = 18 And Val(Mid(sid, 7, 2)) <> 19 Then
xzw_身份证校验 = "出生年错误!"
ElseIf Len(sid) = 18 And Val(Mid(sid, 9, 2)) < 10 Then
xzw_身份证校验 = "年龄好大,请多多保重!"
ElseIf Len(sid) = 18 And Val(Mid(sid, 11, 2)) > 12 Then
xzw_身份证校验 = "出生月份错误!"
ElseIf Len(sid) = 18 And Val(Mid(sid, 13, 2)) > 31 Then
xzw_身份证校验 = "出生日期错误!"
ElseIf Len(sid) = 18 And Mid(sid, 17, 1) Mod 2 <> x Then
xzw_身份证校验 = "性别错误!"
Else
newid = Left(sid, 17)
jym = 0
For i = 1 To 17
jym = jym + Val(Mid(s1, i * 2 - 1, 2)) * Val(Mid(newid, i, 1))
Next i
If Mid(s2, jym Mod 11 + 1, 1) <> Mid(sid, 18, 1) Then
xzw_身份证校验 = "识别码错,应为:" & Mid(s2, jym Mod 11 + 1, 1)
Else
xzw_身份证校验 = "检查无异常"
End If
End If
End Function
- 精品文章
- 暂无标签