ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 跪求输入身份证号,自动生成性别,户口所在省市县

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-8-26 15:27 | 显示全部楼层

身份证处理

网上找身份证前六位编码,通过公式实现归属地

TA的精华主题

TA的得分主题

发表于 2010-8-26 15:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可参考:
http://club.excelhome.net/thread-577380-1-1.html

TA的精华主题

TA的得分主题

发表于 2010-8-26 15:56 | 显示全部楼层
EH里都是“电子牛人”.......

TA的精华主题

TA的得分主题

发表于 2010-8-26 16:21 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-8-26 17:14 | 显示全部楼层

怎么实现验证身份证号码啊?我看不懂 跪求大侠

判断身份证号码输入的有效性

在使用Excel工作表输入身份证号码时经常要判断输入数据是否有误,如位数是否18位,前17位是否都是数字,末尾(校验码)是否正确等。以下给出一个解决方案,除了不能判断户口所在地区外,基本可以判断身份证号码输入的有效性。对于15位的老号码,使用时先在第7位插入“19”,末尾随意加上一位数,凑足18位,程序会计算出正确的校验码。

假设在工作表的第5列输入身份证号码,

首先在这个工作表workseet里建立输入事件处理过程:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 5 Then Call ves(Target.Value, Target)

End Sub ’ Target是输入数据的单元格对象


调用的ves( )过程可以放在共有模块里,参数adds是输入数据的单元格,sfz是输入单元格的内容。

Sub ves(sfz As String, adds As Range)

If sfz = "" Then End

If Len(sfz) <> 18 Then

   MsgBox "请输入18位身份证号码!"

   adds.Value = ""

   End

End If

    Dim i, w, s, cs As Integer

    Dim v, vsm As String

    w = 1: s = 0: v = Right(sfz, 1)      ‘初始变量

    For i = 1 To 17

        w = (w * 2) Mod 11

        cs = Asc(Mid(sfz, 18 - i, 1)) - 48

        If cs >= 0 And cs < 10 Then          ‘如果是数字

            s = s + cs * w

        Else

           MsgBox str(18 - i) + "位不是数字!"

           adds.Value = ""

           i = 20                         ‘提前结束程序

        End If

    Next

     If i = 18 Then                         ‘17位检查结束,开始计算校验码

        s = (12 - s Mod 11) Mod 11

        vsm = LTrim(str(s))

        If s = 10 Then vsm = "X"

        If v <> vsm Then MsgBox "校验码不正确!应当是:" + vsm: adds.Value = ""

     End If

End Sub


说明:

     中国公民的18位身份证号码每一位都有代表的意义,前6位是户口所在地区(县),接着8位是出生日期,第15、16、17是同地同日出生的序号,第17位单数为男性,偶数为女性,最后一位是校验码,网上很多文章介绍校验码的计算,计算都很复杂,在此就不多说。
    其实算法是这样:把前17位的每一个数字和一串加权因子相乘,计算这些乘积的和(S)。加权因子是自右向左,分别是2,22,23,……217,大于10的就模11。在二进制里乘2,就相当于其ASII码向左移一位,这样在和S里每个数字的信息都单独有一位。

    这些乘积的和(S),再模11得到的数字0、1、2、3、4、5、6、7、8、9、10

分别对应1、0、X、9、8、7、6、5、4、3、2,作为校验码。这相当与用12减这些数字再模11。如果是10则用X表示。本文是用vba写出的计算和校验过程。

补记:

如果不使用VBA编程,可以使用名称和公式来计算校验码:

先定义3个名称

Xi ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}

Wi={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},

Vs={1,0,X,9,8,7,6,5,4,3,2}

则校验码=Index(vs,mod(sumproduct(mid(E2,xi,1)*wi),11)+1)

其中E2是18位身份证号码。这应当是最简练的公式了。

选中E2:E65536(输入身份证号码的列),自定义有效性:

=text( Index(vs,mod(sumproduct(mid(E2,xi,1)*wi),11)+1),"0")=RIGHT(E2)

出错警告中写上:“请检查号码输入是否18位,如果确认位数正确,请检查第18位校验码是否正确。”即可完成输入有效性设置

TA的精华主题

TA的得分主题

发表于 2010-8-26 17:14 | 显示全部楼层
原帖由 zhongcai 于 2010-8-24 12:58 发表
性别        公民身份证号码                户口所在省市县
                                       
男        362330198611175000                  江西省上饶市鄱阳县

性别可以的 所属省市 有点难  你可以搜索一下

TA的精华主题

TA的得分主题

发表于 2017-10-20 23:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢各位大侠,正需要!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 12:27 , Processed in 0.037136 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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