判断身份证号码的正确性源码
根据〖中华人民共和国国家标准   GB   11643-1999〗中有关公民身份号码的规定,   
  '公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:   
  '六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。   
  '地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的   
  '年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的   
  '区域范围内,对同年、月、日出生的人员编定的顺序号。   
  '顺序码的奇数分给男性,偶数分给女性。   
  '校验码是根据前面十七位数字码,按照ISO   7064:1983.MOD   11-2校验码计算出来的检验码。下面举例说明该计算方法。   
  '某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:   
  '∑(ai×Wi)(mod   11)……………………………………(1)   
  '公式(1)中:   
  'i----表示号码字符从由至左包括校验码在内的位置序号;   
  'ai----表示第i位置上的号码字符值;   
  'Wi----示第i位置上的加权因子,其数值依据公司Wi=2(n-1)(mod   11)计算得出。(这是一个常数数组)   
  'i   18   17   16   15   14   13   12   11   10   9   8   7   6   5   4   3   2   1   
  '   
  'ai   3   4   0   5   2   4   1   9   8   0   0   1   0   1   0   0   1   a1   
  '   
  'Wi   7   9   10   5   8   4   2   1   6   3   7   9   10   5   8   4   2   1   
  '   
  'ai×Wi   21   36   0   25   16   16   2   9   48   0   0   9   0   5   0   0   2   a1   
  '   
  '根据公式(1)进行计算:   
  '∑(ai×WI)   =   (21   +   36   +   0   +   25   +   16   +   16   +   2   +   9   +   48   +   0   +   0   +   9   +   0   +   5   +   0   +   0   +   2)   =   189   
  '189   ÷   11   =   17   +   2   /   11   
  '∑(ai×Wi)(mod   11)   =   2   
  '然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:   
  '∑(ai×WI)(mod   11)   0   1   2   3   4   5   6   7   8   9   10   
  '校验码字符值ai   1   0   X   9   8   7   6   5   4   3   2   
  '根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为   34052419800101001X。   
  Option   Explicit   
  Dim   Wi(1   To   18)   As   Integer     '校验码   
  Private   Function   SetWi()   
  Wi(1)   =   7   
  Wi(2)   =   9   
  Wi(3)   =   10   
  Wi(4)   =   5   
  Wi(5)   =   8   
  Wi(6)   =   4   
  Wi(7)   =   2   
  Wi(8)   =   1   
  Wi(9)   =   6   
  Wi(10)   =   3   
  Wi(11)   =   7   
  Wi(12)   =   9   
  Wi(13)   =   10   
  Wi(14)   =   5   
  Wi(15)   =   8   
  Wi(16)   =   4   
  Wi(17)   =   2   
  Wi(18)   =   1   
  End   Function   
  Public   Function   CheckCIDC15(ByVal   StrID15   As   String)   
  If   Not   IsNumeric(StrID15)   Then   
          MsgBox   "15位身份证号码输入有误!"   &   vbCrLf   &   "有非数字出现!"   
          CheckCIDC15   =   False   
          Exit   Function   
  End   If   
  If   Val(Mid(StrID15,   9,   2))   <   1   Or   Val(Mid(StrID15,   9,   2))   >   12   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "月份不正确!"   
          CheckCIDC15   =   False   
          Exit   Function   
  End   If   
  If   Val(Mid(StrID15,   11,   2))   <   1   Or   Val(Mid(StrID15,   11,   2))   >   31   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "日期不正确!"   
          CheckCIDC15   =   False   
          Exit   Function   
  Else   
          If   (Val(Mid(StrID15,   9,   2))   =   4   Or   Val(Mid(StrID15,   9,   2))   =   6   Or   Val(Mid(StrID15,   9,   2))   =   9   Or   Val(Mid(StrID15,   9,   2))   =   11)   And   Val(Mid(StrID15,   11,   2))   =   31   Then   
                  MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "月份和日期不匹配"   
                  CheckCIDC15   =   False   
                  Exit   Function   
          ElseIf   Val(Mid(StrID15,   9,   2))   =   2   And   (Val(Mid(StrID15,   11,   2))   =   30   Or   Val(Mid(StrID15,   11,   2))   =   31)   Then   
                  MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "2月份没有"   &   Val(Mid(StrID15,   11,   2))   &   "天"   
                  CheckCIDC15   =   False   
                  Exit   Function   
          End   If   
  End   If   
  CheckCIDC15   =   True   
  End   Function   
  Public   Function   CheckCIDC18(ByVal   StrID18   As   String)   
  Dim   StrID17   As   String,   AiWi   As   Integer,   num   As   Integer,   A18   As   String   
  SetWi   
  If   Not   IsNumeric(Left(StrID18,   17))   Then   
          MsgBox   "身份证号码输入有误!"   
          CheckCIDC18   =   False   
          Exit   Function   
  End   If   
  If   Val(Mid(StrID18,   11,   2))   <   1   Or   Val(Mid(StrID18,   11,   2))   >   12   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "月份不正确!"   
          CheckCIDC18   =   False   
          Exit   Function   
  End   If   
  If   Val(Mid(StrID18,   13,   2))   <   1   Or   Val(Mid(StrID18,   13,   2))   >   31   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "日期不正确!"   
          CheckCIDC18   =   False   
          Exit   Function   
  Else   
          If   (Val(Mid(StrID18,   11,   2))   =   4   Or   Val(Mid(StrID18,   11,   2))   =   6   Or   Val(Mid(StrID18,   11,   2))   =   9   Or   Val(Mid(StrID18,   11,   2))   =   11)   And   Val(Mid(StrID18,   13,   2))   =   31   Then   
                  MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "月份和日期不匹配"   
                  CheckCIDC18   =   False   
                  Exit   Function   
          ElseIf   Val(Mid(StrID18,   11,   2))   =   2   And   (Val(Mid(StrID18,   13,   2))   =   30   Or   Val(Mid(StrID18,   13,   2))   =   31)   Then   
                  MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "2月份没有"   &   Val(Mid(StrID18,   13,   2))   &   "天"   
                  CheckCIDC18   =   False   
                  Exit   Function   
          End   If   
  End   If   
  StrID17   =   Left(StrID18,   17)   
  AiWi   =   0   
  For   num   =   1   To   17   
          AiWi   =   AiWi   +   Val(Mid(StrID17,   num,   1))   *   Wi(num)   
  Next   num   
  Select   Case   AiWi   Mod   11   
          Case   0   
                  A18   =   "1"   
          Case   1   
                  A18   =   "0"   
          Case   2   
                  A18   =   "X"   
          Case   3   
                  A18   =   "9"   
          Case   4   
                  A18   =   "8"   
          Case   5   
                  A18   =   "7"   
          Case   6   
                  A18   =   "6"   
          Case   7   
                  A18   =   "5"   
          Case   8   
                  A18   =   "4"   
          Case   9   
                  A18   =   "3"   
          Case   10   
                  A18   =   "2"   
  End   Select   
  If   A18   <>   Right(StrID18,   1)   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "尾数校验码不正确"   
          CheckCIDC18   =   False   
          Exit   Function   
  End   If   
  CheckCIDC18   =   True   
  End   Function   
    
  Public   Function   CIDC15To18(ByVal   StrID15   As   String)   
  SetWi   
  Dim   StrID17   As   String,   StrID18   As   String,   num   As   Integer,   AiWi   As   Integer   
  If   Not   IsNumeric(StrID15)   Then   
          MsgBox   "15位身份证号码输入有误!"   &   vbCrLf   &   "有非数字出现!"   
          Exit   Function   
  End   If   
  If   Val(Mid(StrID15,   9,   2))   <   1   Or   Val(Mid(StrID15,   9,   2))   >   12   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "月份不正确!"   
          Exit   Function   
  End   If   
  If   Val(Mid(StrID15,   11,   2))   <   1   Or   Val(Mid(StrID15,   11,   2))   >   31   Then   
          MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "日期不正确!"   
          Exit   Function   
  Else   
          If   (Val(Mid(StrID15,   9,   2))   =   4   Or   Val(Mid(StrID15,   9,   2))   =   6   Or   Val(Mid(StrID15,   9,   2))   =   9   Or   Val(Mid(StrID15,   9,   2))   =   11)   And   Val(Mid(StrID15,   11,   2))   =   31   Then   
                  MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "月份和日期不匹配"   
                  Exit   Function   
          ElseIf   Val(Mid(StrID15,   9,   2))   =   2   And   (Val(Mid(StrID15,   11,   2))   =   30   Or   Val(Mid(StrID15,   11,   2))   =   31)   Then   
                  MsgBox   "身份证号码输入有误!"   &   vbCrLf   &   "2月份没有"   &   Val(Mid(StrID15,   11,   2))   &   "天"   
                  Exit   Function   
          End   If   
  End   If   
  StrID17   =   Left(StrID15,   6)   &   "19"   &   Right(StrID15,   9)   
  AiWi   =   0   
  For   num   =   1   To   17   
          AiWi   =   AiWi   +   Val(Mid(StrID17,   num,   1))   *   Wi(num)   
  Next   num   
  Select   Case   AiWi   Mod   11   
          Case   0   
                  StrID18   =   StrID17   &   "1"   
          Case   1   
                  StrID18   =   StrID17   &   "0"   
          Case   2   
                  StrID18   =   StrID17   &   "X"   
          Case   3   
                  StrID18   =   StrID17   &   "9"   
          Case   4   
                  StrID18   =   StrID17   &   "8"   
          Case   5   
                  StrID18   =   StrID17   &   "7"   
          Case   6   
                  StrID18   =   StrID17   &   "6"   
          Case   7   
                  StrID18   =   StrID17   &   "5"   
          Case   8   
                  StrID18   =   StrID17   &   "4"   
          Case   9   
                  StrID18   =   StrID17   &   "3"   
          Case   10   
                  StrID18   =   StrID17   &   "2"   
  End   Select   
  CIDC15To18   =   StrID18   
  End   Function   

判断身份证号码的正确性源码相关推荐

  1. 【图像识别】身份证号码识别matlab源码

    简介: 本文主要介绍几种基于灰度的图像匹配算法:平均绝对差算法(MAD).绝对误差和算法(SAD).误差平方和算法(SSD).平均误差平方和算法(MSD).归一化积相关算法(NCC).序贯相似性检测算 ...

  2. EXCEL中如何提取身份证出生日期和性别信息以及检验身份证号码的正确性

    中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为: 15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码. 18位:6位数字常住户口所在县市 ...

  3. Java判断身份证号码是否正确

    方法如下: public static final int IDENTITYCODE_OLD = 15; // 老身份证15位public static final int IDENTITYCODE_ ...

  4. Java判断身份证号码

    1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  5. qq号码交易源码 php,QQjiaoyiyuanma QQ号码交易站源码备份 ASP的 ,也是不错的 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...

    文件名称: QQjiaoyiyuanma下载 收藏√  [ 5  4  3  2  1 ] 开发工具: ASP 文件大小: 1127 KB 上传时间: 2013-01-09 下载次数: 2 详细说明: ...

  6. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码...

    Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...

  7. JS准确判断身份证号码

    JS准确判断身份证号码 附带示意图 以及使用方法 //校验年月日专用isDate8(sDate) {if (!/^[0-9]{8}$/.test(sDate)) {return false;}var ...

  8. iOS判断身份证号码是否正确

    ①根据百度百科中身份证号码的标准实现该方法 ②该方法只能判断18位身份证,且不能判断身份证号码和姓名是否对应(要看姓名和号码是否对应,应该有大量的数据库做对比才能实现) ③直接copy这段代码,就能通 ...

  9. 利用WPS工具检查身份证号码的正确性

    程序代码园发文地址:利用WPS工具检查身份证号码的正确性-程序代码园 今天财务找到我说,让帮忙检查一下同事身份证信息是不是对的,当时把我搞懵了,不知道如何检查,上网查了一下资料后找到一种实际运用下来还 ...

最新文章

  1. 【注意事项】论文/申报书格式
  2. FirefoxLinux下的网银离我们不远了
  3. webSocket使用心跳包实现断线重连
  4. 利用多项式特征生成与递归特征消除解决特征组合与特征选择问题
  5. erlang精要(4)-等于与不等于
  6. 新浪微博WeiboManageAction的java实现
  7. html input日期值,input标签设置时间值
  8. LeetCode 1568. 使陆地分离的最少天数(DFS)
  9. java implements t_Java泛型——為什么“擴展T”允許而不是“實現T”?
  10. Spring Cloud Eureka(三)实现一个高可用的注册中心
  11. java 短信备份宝_Android实战教程第八篇之短信备份
  12. idea自动化部署Alibaba Cloud Toolkit
  13. 互联网大厂裁掉你的奇葩理由
  14. tradecenter日内交易_一个华尔街交易员一天的工作是怎样的?
  15. rails 分页 Paging kaminari
  16. 特么,冒泡排序有这么难?
  17. LT8911EXB 产品功能概述 MIPIDSI/CSI转EDP
  18. 往哪里看低买高卖和利润之间
  19. 基于FPGA的数字识别实现
  20. Qt蓝牙:QBluetoothDeviceInfo、QBluetoothAddress

热门文章

  1. IIS 配置问题解决
  2. python 线程thread详解
  3. 判断一个多边形是凸多边形还是凹多边形
  4. 上拉电阻和下拉电阻判断
  5. MySQL数据库(五)percona软件介绍,innobackupex备份与恢复
  6. 无盘服务器chkdsk *: /f)修复命令,使用CHKDSK命令修复U盘文件或目录损坏无法读取问题...
  7. 大数据原始数据从那些途径获取?200个国内外经济金融行研咨询数据网站大全...
  8. 遥感建筑物提取数据集
  9. 专题 | 项目管理知识、方法论、工具NO.9:你应该知道的项目管理的五个过程组和九大知识领域
  10. 三元一次方程组例题_三元一次方程组习题及解答