工作中经常与身份证号码打交道,现在各类信息系统都把身份证号码作为识别定义人员的关键字段,下面这段代码,在我的工作中发挥了极其重要的作用!分享出来,希望能帮助到更多的人!

10年前写的,if套if,格式不规范,也不够简练,但用起来还是挺好用的!不再改了!

函数入参就1个,已经在代码里面注明了。

函数返回结果共7种,分别是:

身份证号码格式问题:

  1. Err01_身份证号码格式错误;
  2. Err05_身份证号码末位须为半角数字或字母X;
  3. Err06_身份证号码前17位须为半角数字;
  4. Err07_身份证号码必须是18位;

身份证号码出生年月日(第7位至第14位)错误:

  1. Err02_身份证号码错误;
  2. Err03_身份证号码错误;

身份证号码校验错误:

  1. Err04_身份证号码校验错误;

使用方法很简单,按Alt+F11,【插入】—【模块】,粘贴下面代码。在单元格中输入:

=CheckID(单元格地址)

即可校验指定单元格内身份证号码有效性。

'=====================================
'函数名称:CheckID
'
'函数作用:验证身份证号码是否有效
'
'参    数:cid,身份证号码,String类型
'
'返 回 值:错误信息,String类型
'
'作    者:w2kexp@csdn
'
'编写日期:2013-11-13
'=====================================
Function CheckID(ByVal cid As String)Dim rn As Boolean '闰年标志Dim DaysFebruary As Integer  '2月份天数Dim DaysPerMonth             '每月天数Select Case Len(cid)Case 18                                                                                                                              '当身份证号码为18位时If IsNumeric(Left(cid, 17)) ThenIf IsNumeric(Right(cid, 1)) Or Right(cid, 1) = "X" Then                                                                          '如果最后一位是数字或"X"时,判断是否为闰年If Int(Mid(cid, 7, 2)) < 18 Or Int(Mid(cid, 7, 2)) > 20 Or Int(Mid(cid, 11, 2)) < 1 Or Int(Mid(cid, 11, 2)) > 12 ThenCheckID = "Err01_身份证号码格式错误;"Exit FunctionElse'如果年、月格式正确,开始判断每月天数If Mid(cid, 8, 3) = "000" And Int(Mid(cid, 7, 4)) Mod 400 = 0 Then            '如果是世纪年,且能被400整除,为闰年rn = TrueElseIf Int(Mid(cid, 7, 4)) Mod 4 = 0 And Int(Mid(cid, 7, 4)) Mod 100 <> 0 Then      '如果是能被4整除,且不能被100整除,为闰年rn = TrueElsern = FalseEnd IfEnd If'取得rn结果If Int(Mid(cid, 11, 2)) = 2 Then                                        '如果是2月,判断天数If rn = True Then   '闰年2月29天DaysFebruary = 29Else             '否则2月28天DaysFebruary = 28End IfIf Int(Mid(cid, 13, 2)) > DaysFebruary Then         '2月份天数大于DaysFebruary就报错CheckID = "Err02_身份证号码错误;"Exit FunctionEnd IfElse                                                                   '如果是其它月份,判断天数If Int(Mid(cid, 11, 2)) = 4 Or Int(Mid(cid, 11, 2)) = 6 Or Int(Mid(cid, 11, 2)) = 9 Or Int(Mid(cid, 11, 2)) = 11 ThenDaysPerMonth = 30ElseDaysPerMonth = 31End IfIf Int(Mid(cid, 13, 2)) > DaysPerMonth ThenCheckID = "Err03_身份证号码错误;"Exit FunctionEnd IfEnd If'验证检验码Dim cidwsDim s As Longs = 0cidws = Split("7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2", " ")For a = 1 To 17s = s + Mid(cid, a, 1) * cidws(a - 1)Nextys = s Mod 11Dim ysdy, bcidysdy = Split("1 0 X 9 8 7 6 5 4 3 2", " ")bcid = Left(cid, 17) & ysdy(ys)If bcid <> cid ThenCheckID = "Err04_身份证号码校验错误;"Exit FunctionElseCheckID = ""End IfEnd IfElseCheckID = "Err05_身份证号码末位须为半角数字或字母X;"Exit FunctionEnd IfElseCheckID = "Err06_身份证号码前17位须为半角数字;"Exit FunctionEnd IfCase ElseCheckID = "Err07_身份证号码必须是18位;"Exit FunctionEnd Select
End Function

10年前写的,身份证号码验证VBA代码相关推荐

  1. 身份证号码验证(转)

    文章出处: http://dengo.org/archives/941 不少大的游戏注册时都要输入身份证号码,来限制未成年人,配合所谓的反沉迷系统,账号注册环节注重的是快捷,所以身份证验证都不是真实的 ...

  2. JS正则表达式-附身份证号码验证(简易版)

    文章目录 JS正则表达式 匹配与搜索 一.方括号,圆括号 二.修饰符 三.元字符 四.量词 身份证号码验证(简易版) 身份证号码规则: 1.地址码 2.年份码 3.月份码 4.日期码 5.顺序码 6. ...

  3. Android身份证号码验证

    最近用到身份证号码验证,在网上看了些资料,写了些方法记录下: 文章迁至:Java/Android通用身份证号验证 public class IDCardValidate {public static ...

  4. 身份证号码验证(c语言)

    身份证号码验证 描述 格式 样例 题解及注释 描述 居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内 ...

  5. javascript身份证号码验证函数支持带x

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

  6. 身份证号码验证-支持新的带x身份证

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

  7. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

  8. .net身份证号码验证

    using System; /// <summary>/// Summary description for IDCardValid/// </summary>public c ...

  9. 正则实现二代身份证号码验证详解

    Start 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 一: IdCodeValid:f ...

最新文章

  1. PowerDesigner导入Excel/CSV
  2. C++ Primer 5th笔记(chap 12 动态内存)weak_ptr
  3. 两数之和 II - 输入有序数组
  4. 【MFC】1.Windows程序内部运行原理
  5. mysql实现日志系统_基于Hadoop/CloudBase/MySQL的日志分析系统的设计与实现
  6. oracle无法修改字段类型,Oracle如何修改字段类型呢? 爱问知识人
  7. nssl1247-A【dp】
  8. 端午安康 | 6月14日 星期一 | B站首个破亿视频诞生;荣耀50系列预约人数超百万;贝索斯太空船票拍出2800万美元...
  9. C文件 写入 读取 函数
  10. 网络安全工程考试大纲
  11. linux打包根目录
  12. SG90舵机驱动,有代码
  13. Executing an update/delete query
  14. Java基础_week6
  15. 天下数据解析域名及域名转向
  16. 解决docker删除镜像时image is referenced in multiple repositories
  17. 紧急通知,1秒下达给员工 | 巴别鸟 V5.0上线
  18. java使用爬虫工具jsoup实现抓取网页的内容及图片并写入到word文档中
  19. 有效的医疗设备维修保养解决方案
  20. windows10自动修复无法开机

热门文章

  1. C语言 有五个人坐在一起问第五个人多少岁?
  2. 高三女生因高中数学知识的数列解题技巧没掌握与梦想大学失之交臂
  3. 服务器托管和租用如何选择?
  4. 去掉百度搜索右侧的搜索热点
  5. google chrome主页被毒霸篡改解决方式
  6. python第七章文件和数据格式化选择题_《计算机二级Python语言程序设计考试》第7章:文件和数据格式化...
  7. 02-06 普通线性回归(波斯顿房价预测)+特征选择
  8. win7点了计算机看不见硬盘,在安装Win7系统时找不到硬盘怎么办
  9. 阅读记录|《远山淡影》
  10. 数学中的鞍点、驻点、拐点、极值点