ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1133|回复: 2

[求助] 函数作用:身份证号码侦测

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-2-15 12:20 | 显示全部楼层 |阅读模式
函数作用:身份证号码侦测
下面的这段代码是我从网上下载的,怎么不能用?请大侠指出总是所在。



################################################################

Public Function xfz(sid, xb) ' As Currency
    '1、身份证不满15位,2、性别与身份证不符,3、出生月份出错(不在1-12)
    '4、出生日期出错(不在1-31范围内),5、18位校验位出错,6、18位身份证年份出借
    On Error Resume Next
    Dim s1, s2, jym, x
    If xb = 1 Then x = 1
    If xb = "男" Then x = 1
    If xb = 2 Then x = 0
    If xb = "女" 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
        xfz = "身份证位数错误"
        '测试15位身份证的信息
    ElseIf Len(sid) = 15 And Val(Mid(sid, 7, 2)) < 10 Then
        xfz = "年龄好大,请多多保重!"
    ElseIf Len(sid) = 15 And Val(Mid(sid, 9, 2)) > 12 Then
        xfz = "出生月份错误!"
    ElseIf Len(sid) = 15 And Val(Mid(sid, 11, 2)) > 31 Then
        xfz = "出生日期错误!"
    ElseIf Len(sid) = 15 And Mid(sid, 15, 1) Mod 2 <> x Then
        xfz = "性别错误!"
    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
        xfz = newid + Mid(s2, jym Mod 11 + 1, 1)
        '测试18位身份证的信息
    ElseIf Len(sid) = 18 And Val(Mid(sid, 7, 2)) <> 19 Then
        xfz = "出生年错误!"
    ElseIf Len(sid) = 18 And Val(Mid(sid, 9, 2)) < 10 Then
        xfz = "年龄好大,请多多保重!"
    ElseIf Len(sid) = 18 And Val(Mid(sid, 11, 2)) > 12 Then
        xfz = "出生月份错误!"
    ElseIf Len(sid) = 18 And Val(Mid(sid, 13, 2)) > 31 Then
        xfz = "出生日期错误!"
    ElseIf Len(sid) = 18 And Mid(sid, 17, 1) Mod 2 <> x Then
        xfz = "性别错误!"
    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
            xfz = "识别码错,应为:" & Mid(s2, jym Mod 11 + 1, 1)
        Else
            xfz = ""
        End If
    End If
End Function

TA的精华主题

TA的得分主题

发表于 2015-2-16 09:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我原先也写过一个,你参考一下——
  1. Function s15to18(IdStr) As String '身份证号码校验
  2. On Error Resume Next
  3. Dim wi As Variant, ji As Variant, sum%, i%, intMsg%
  4. wi = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
  5. ji = Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")
  6. sum = 0
  7. If Len(IdStr) = 15 Then
  8.   If Not IsNumeric(IdStr) Then
  9.     MsgBox "15位身份证号码中有非数字字符!"
  10.     Exit Function
  11.   End If
  12.   IdStr = Left(IdStr, 6) & "19" & Right(IdStr, 9)
  13. ElseIf Len(IdStr) = 18 Then
  14.   If Not (IsNumeric(Mid(IdStr, 1, 17)) And (IsNumeric(Right(IdStr, 1)) Or Right(IdStr, 1) = "X" Or Right(IdStr, 1) = "x")) Then
  15.     MsgBox "18位身份证号码中有非数字字符!"
  16.     Exit Function
  17.   End If
  18. Else
  19.   MsgBox "身份证号码位数不对,请检查!"
  20.   Exit Function
  21. End If
  22. If IsError(DateValue(Mid(IdStr, 7, 4) & "-" & Mid(IdStr, 11, 2) & "-" & Mid(IdStr, 13, 2))) Then
  23.   MsgBox "身份证号码中日期信息有误!"
  24.   Exit Function
  25. End If

  26. For i = 0 To UBound(wi)
  27.   sum = sum + Mid(IdStr, i + 1, 1) * wi(i)
  28. Next i

  29. If Len(IdStr) = 17 Then
  30.   s15to18 = IdStr & ji(sum Mod 11)
  31. Else
  32.   If ji(sum Mod 11) <> Right(IdStr, 1) Then
  33.     intMsg = MsgBox("18位身份证号码中的校验码错误!" & vbCrLf & "您要输入的是:" & Mid(IdStr, 1, 17) & ji(sum Mod 11) & "吗?", vbYesNo)
  34.     If intMsg = vbYes Then
  35.       s15to18 = Mid(IdStr, 1, 17) & ji(sum Mod 11)
  36.     Else
  37.       Exit Function
  38.     End If
  39.   Else
  40.     s15to18 = IdStr
  41.   End If
  42. End If
  43. End Function
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-16 12:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sunya_0529 发表于 2015-2-16 09:20
我原先也写过一个,你参考一下——

能校验出部分内容,不过还是表示感谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 05:38 , Processed in 0.037679 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表