判断身份证号码的正确性源码
根据〖中华人民共和国国家标准 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 |
判断身份证号码的正确性源码相关推荐
- 【图像识别】身份证号码识别matlab源码
简介: 本文主要介绍几种基于灰度的图像匹配算法:平均绝对差算法(MAD).绝对误差和算法(SAD).误差平方和算法(SSD).平均误差平方和算法(MSD).归一化积相关算法(NCC).序贯相似性检测算 ...
- EXCEL中如何提取身份证出生日期和性别信息以及检验身份证号码的正确性
中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为: 15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码. 18位:6位数字常住户口所在县市 ...
- Java判断身份证号码是否正确
方法如下: public static final int IDENTITYCODE_OLD = 15; // 老身份证15位public static final int IDENTITYCODE_ ...
- Java判断身份证号码
1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- 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 详细说明: ...
- android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码...
Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...
- JS准确判断身份证号码
JS准确判断身份证号码 附带示意图 以及使用方法 //校验年月日专用isDate8(sDate) {if (!/^[0-9]{8}$/.test(sDate)) {return false;}var ...
- iOS判断身份证号码是否正确
①根据百度百科中身份证号码的标准实现该方法 ②该方法只能判断18位身份证,且不能判断身份证号码和姓名是否对应(要看姓名和号码是否对应,应该有大量的数据库做对比才能实现) ③直接copy这段代码,就能通 ...
- 利用WPS工具检查身份证号码的正确性
程序代码园发文地址:利用WPS工具检查身份证号码的正确性-程序代码园 今天财务找到我说,让帮忙检查一下同事身份证信息是不是对的,当时把我搞懵了,不知道如何检查,上网查了一下资料后找到一种实际运用下来还 ...
最新文章
- 【注意事项】论文/申报书格式
- FirefoxLinux下的网银离我们不远了
- webSocket使用心跳包实现断线重连
- 利用多项式特征生成与递归特征消除解决特征组合与特征选择问题
- erlang精要(4)-等于与不等于
- 新浪微博WeiboManageAction的java实现
- html input日期值,input标签设置时间值
- LeetCode 1568. 使陆地分离的最少天数(DFS)
- java implements t_Java泛型——為什么“擴展T”允許而不是“實現T”?
- Spring Cloud Eureka(三)实现一个高可用的注册中心
- java 短信备份宝_Android实战教程第八篇之短信备份
- idea自动化部署Alibaba Cloud Toolkit
- 互联网大厂裁掉你的奇葩理由
- tradecenter日内交易_一个华尔街交易员一天的工作是怎样的?
- rails 分页 Paging kaminari
- 特么,冒泡排序有这么难?
- LT8911EXB 产品功能概述 MIPIDSI/CSI转EDP
- 往哪里看低买高卖和利润之间
- 基于FPGA的数字识别实现
- Qt蓝牙:QBluetoothDeviceInfo、QBluetoothAddress
热门文章
- IIS 配置问题解决
- python 线程thread详解
- 判断一个多边形是凸多边形还是凹多边形
- 上拉电阻和下拉电阻判断
- MySQL数据库(五)percona软件介绍,innobackupex备份与恢复
- 无盘服务器chkdsk *: /f)修复命令,使用CHKDSK命令修复U盘文件或目录损坏无法读取问题...
- 大数据原始数据从那些途径获取?200个国内外经济金融行研咨询数据网站大全...
- 遥感建筑物提取数据集
- 专题 | 项目管理知识、方法论、工具NO.9:你应该知道的项目管理的五个过程组和九大知识领域
- 三元一次方程组例题_三元一次方程组习题及解答