ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助检查身份证检查

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-5 09:06 | 显示全部楼层 |阅读模式
我想求得一个身份证检查的代码,y列是已经输入好的身份证,我希望执行他能检查出身份证的错误,例如身份证没输入18位,身份证含有字母没有大写,身份证含有出生年月日的错误,例如有个身份是2021-10-23,结果身份证号变成440902202123101562等等这类执行检查按钮就可以检查出来的,我希望这个程序能配合我其他程序一起执行,在正确的时候不影响其他程序执行,错误的时候弹出提示“xx身份证错误”,例如表格中张7的身份证错误,按检查的时候提示“张7身份证号错误”,谢谢高手师傅的帮忙

Book1.rar

26.02 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2023-4-5 10:40 | 显示全部楼层
就简单拆分条件判断

TA的精华主题

TA的得分主题

发表于 2023-4-5 10:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

  1. Rem **********************************************************************************************
  2. Rem 函数名:    CheckSFZCardID
  3. Rem 函数功能:  检查身份证号码是否合规则
  4. Rem 返回值:     返回             布尔类型
  5. Rem 参数1:       CardID         字符类型   身份证号码
  6. Rem 参数2:       StrOUT        文本类型   要什么结果: 出生日期,性别,对比结果  默认是=对比结果
  7. Rem 参数3:       TiShi            布尔类型   是否显示错误信息
  8. Rem 使用方法:  MsgBox CheckCardID_SFZ(CardID:=StrID,  StrOUT:="" ,TiShi:=True)
  9. Rem 整理:北极狐工作室 QQ:14885553
  10. Rem ***********************************************************************************************
  11. Public Function CheckCardID_SFZ(ByVal CardID As String, Optional StrOUT As String = "对比结果", Optional TiShi As Boolean = True)
  12.     Dim Exception, StrAddSF As String
  13.     Dim ARR, BRR, SHUZI, ZAD
  14.     Dim WEI, YAN1, YAN2 As Integer
  15.     Dim DATEX As String
  16.     Dim BOOL As Boolean

  17.     Application.Volatile '//自动计算自定义函数
  18.     BOOL = True  '//假设正确
  19.     Exception = ""
  20.    
  21.     If StrOUT = "" Then StrOUT = "对比结果"  '//性别,出生日期
  22.     Set ZAD = CreateObject("Scripting.Dictionary")

  23.     If Len(CardID) <> 18 Then
  24.         Rem  限定身份证号是18位
  25.         BOOL = False
  26.         Exception = Exception & vbCrLf & "身份证号必须是:18位"
  27.     Else
  28.         Rem 省份验证
  29.         StrAddSF = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"
  30.         If InStr(StrAddSF, Mid(CardID, 1, 2)) = 0 Then
  31.             Exception = Exception & vbCrLf & "省份部分有误"
  32.             BOOL = False
  33.         End If
  34.         
  35.         Rem 校验前17位是否为数字/检验第18位校验码是否正确
  36.         ARR = Array("7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2")
  37.         BRR = Array("1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2")
  38.         For WEI = 1 To 17
  39.             SHUZI = Mid(CardID, WEI, 1)
  40.             If IsNumeric(SHUZI) = False Then
  41.                 BOOL = False
  42.                 Exception = Exception & vbCrLf & "您可能输入了非法字符"
  43.             Else
  44.                 YAN1 = YAN1 + SHUZI * ARR(WEI - 1)
  45.             End If
  46.         Next
  47.         
  48.         If Exception = "" Then
  49.             Rem  校验码正确
  50.             YAN2 = YAN1 Mod 11
  51.             If UCase(Mid(CardID, 18)) <> UCase(BRR(YAN2)) Then
  52.                 BOOL = False
  53.                 Exception = Exception & vbCrLf & "校验码不符"
  54.             End If
  55.             
  56.             Rem  '限定出生日期范围为1920.1.1-2100.1.1/消息框提示再次确认出生日期、性别
  57.             DATEX = Mid(CardID, 7, 4) & "-" & Mid(CardID, 11, 2) & "-" & Mid(CardID, 13, 2)
  58.             If IsDate(DATEX) = False Then
  59.                 BOOL = False
  60.                 Exception = Exception & vbCrLf & "输入的出生时间可能有误"
  61.             Else
  62.                 DATEX = Format(DATEX, "yyyy-MM-dd")
  63.                 If DateDiff("D", "1901-01-01", DATEX) > 0 And DateDiff("D", "2101-01-01", DATEX) < 0 Then
  64.                     ZAD("出生日期") = DATEX
  65.                     If InStr("13579", Mid(CardID, 17, 1)) > 0 Then
  66.                         ZAD("性别") = "男"
  67.                     Else
  68.                         ZAD("性别") = "女"
  69.                     End If
  70.                 Else
  71.                     BOOL = False
  72.                     Exception = Exception & vbCrLf & "输入的出生时间超范围"
  73.                 End If
  74.             End If
  75.         End If
  76.     End If
  77.    
  78.     Rem 输出结果
  79.     If Exception = "" Then
  80.         Rem 无错误,正常输出
  81.         ZAD("对比结果") = BOOL
  82.         CheckCardID_SFZ = ZAD(StrOUT)
  83.     Else
  84.         Rem 如果有错误
  85.         If TiShi = True Then
  86.             Rem  直接输出错误信息
  87.             CheckCardID_SFZ = Exception
  88.         Else
  89.         Rem 根据要求选择输出值
  90.             Select Case StrOUT
  91.                 Case "对比结果"
  92.                     CheckCardID_SFZ = False
  93.                 Case "性别"
  94.                     CheckCardID_SFZ = ""
  95.                 Case "出生日期"
  96.                     CheckCardID_SFZ = ""
  97.                 Case Else
  98.                     CheckCardID_SFZ = False
  99.             End Select
  100.         End If
  101.     End If
  102. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2023-4-5 11:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-5 11:05 | 显示全部楼层
请参见附件
Book1.rar (51.14 KB, 下载次数: 11)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-5 11:13 | 显示全部楼层

谢谢yylucke师傅的回答,这个代码输入正确的身份证一样显示是错误,能否麻烦您再帮我看下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-5 11:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢yylucke师傅,但是我执行的时候输入正确的身份证一样提示错误,能否麻烦你看看是啥问题

TA的精华主题

TA的得分主题

发表于 2023-4-5 11:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-5 16:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
qiongmei6 发表于 2023-4-5 11:29
谢谢yylucke师傅,但是我执行的时候输入正确的身份证一样提示错误,能否麻烦你看看是啥问题

已经修改

Book1.rar (56.78 KB, 下载次数: 9)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-5 16:34 | 显示全部楼层
其实这个只能判断合不合规则,但是想要知道这是不是真实的身份证那得去公安那里查。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:44 , Processed in 0.050595 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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