当前位置: 首页 » 产品 » 新闻资讯 » 正文

赛尔号学习力WPS表格如何提取身份证号码中的各种信息

放大字体  缩小字体 发布日期: 2024-10-24 00:19   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:16
核心提示:  小编给大家介绍下WPS表格提取身份证号码中的各种信息  小编教程给大家带来的是一个相对比较强大的函数GetIDcardInfo,取得
赛尔号学习力WPS表格如何提取身份证号码中的各种信息

  小编给大家介绍下WPS表格提取身份证号码中的各种信息

  小编教程给大家带来的是一个相对比较强大的函数GetIDcardInfo,取得身份证号码中的各种信息:

  这个函数的第一个参数为一个字符串,代表身份证号,第二个参数为整数,代表要获取的类型,具体为:

  1 户口所在地(采用旧版数据库)

  2 户口所在地(采用新版数据库)

  3 生日

  4 性别

  5 年龄(考虑是否到达生日)

  6 年龄(不考虑是否到达生日)

  7 星座

  返回值为相关信息。

  好了,先看效果图吧:

WPS表格如何提取身份证号码中的各种信息  三联

WPS表格提取身份证号码中的各种信息教程

  接下来是代码:

  '辅助函数CharInStr,判断char的首字符是不是在str中

  Public Function CharInStr(ByVal char As String, ByVal str As String) As Integer

  Application.ScreenUpdating=False '关闭屏幕更新,加快速度

  On Error Resume Next

  If Len(char)=0 Or Len(str)=0 Then

  CharInStr=0: Exit Function '长度为零,退出

  Else

  char=Mid(char, 1, 1)

  CharInStr=InStr(str, char)

  End If

  Application.ScreenUpdating=True '恢复屏幕更新

  End Function

  '辅助函数IsOkSFZID,,判断是否是合法的身份证号

  Public Function IsOkSFZID(ByVal str As String) As Boolean

  Application.ScreenUpdating=False '关闭屏幕更新,加快速度

  On Error Resume Next

  Dim Length As Integer

  Length=Len(str)

  If Length <> 15 And Length <> 18 Then

  IsOkSFZID=False: Exit Function '长度不满足要求,返回假,退出

  ElseIf Length=15 Then '15位必须纯数字

  For i=1 To 15

  If CharInStr(Mid(str, i, 1), "0123456789")=0 Then

  IsOkSFZID=False: Exit Function '有非数字,返回假,退出

  End If

  Next i

  ElseIf Length=18 Then '18位必须纯数字或者前17位纯数字,最后一位是大写或小写的X

  For i=1 To 17

  If CharInStr(Mid(str, i, 1), "0123456789")=0 Then

  IsOkSFZID=False: Exit Function '有非数字,返回假,退出

  End If

  Next i

  If CharInStr(Mid(str, 18, 1), "0123456789xX")=0 Then

  IsOkSFZID=False: Exit Function '第18位不是数字或字母X(不分大小写),返回假,退出

  End If

  End If

  IsOkSFZID=True '能运行到这一步还没有退出函数的,说明符合要求,返回真

  Application.ScreenUpdating=True '恢复屏幕更新

  End Function

  '======================

  '主函数GetIDcardInfo,取得身份证号码中的各种信息

  'GetType参数说明

  '1 户口所在地(采用旧版数据库)

  '2 户口所在地(采用新版数据库)

  '3 生日

  '4 性别

  '5 年龄(考虑是否到达生日)

  '6 年龄(不考虑是否到达生日)

  '7 星座

  Function GetIDcardInfo(str As Range, Optional GetType As Integer=2) As String

  Application.ScreenUpdating=False '关闭屏幕更新,加快速度

  On Error GoTo err '如果出现错误,自动跳到err段代码,只要是针对vlookup函数精确查找时没有找到结果会出错的情况

  If False=IsOkSFZID(str) Then GetIDcardInfo="号码错误": Exit Function '号码不符合身份证号的格式,退出

  If GetType > 7 Or GetType < 1 Then GetIDcardInfo="第二参数错误": Exit Function '第二参数越界,退出

  Dim temp As String

  '按第二参数处理各种情况

  If GetType=1 Then

  temp=WorksheetFunction.VLookup(Mid(str, 1, 2), ThisWorkbook.Sheets(1).Range("A1:B5805"), 2, False)

  temp=temp & "-" & WorksheetFunction.VLookup(Mid(str, 1, 6), ThisWorkbook.Sheets(1).Range("A1:B5805"), 2, False)

  GetIDcardInfo=temp

  Exit Function

  End If

  If GetType=2 Then

  temp=WorksheetFunction.VLookup(Val(Mid(str, 1, 6)), ThisWorkbook.Sheets(2).Range("A1:E3506"), 5, False)

  GetIDcardInfo=temp

  Exit Function

  End If

  '以上利用工作表函数VLookup进行精确查找,如果没有查找,将出错,此时将自动进入错误处理段代码

  '处理出生日期和性别的代码

  If GetType=3 Then

  If Len(str)=15 Then

  GetIDcardInfo="19" & Mid(str, 7, 2) & "-" & Mid(str, 9, 2) & "-" & Mid(str, 11, 2)

  ElseIf Len(str)=18 Then

  GetIDcardInfo=Mid(str, 7, 4) & "-" & Mid(str, 11, 2) & "-" & Mid(str, 13, 2)

  End If

  Exit Function

  End If

  If GetType=4 Then

  GetIDcardInfo=VBA.IIf((Mid(str, 15, 3) Mod 2), "男", "女")

  Exit Function

  End If

  '处理周岁 获得出生的年月日数据和当前计算机的年月日数据,并全部用val转换为数值,便于比较和计算

  If GetType=5 Then

  Dim y, m, d As Integer

  If Len(str)=15 Then

  y=Val("19" & Mid(str, 7, 2))

  m=Val(Mid(str, 9, 2))

  d=Val(Mid(str, 11, 2))

  ElseIf Len(str)=18 Then

  y=Val(Mid(str, 7, 4))

  m=Val(Mid(str, 11, 2))

  d=Val(Mid(str, 13, 2))

  End If

  If Val(Month(Now)) > m Then '当前月份大于出生月份,肯定已经过了生日

  temp=Val(Year(Now)) - y

  ElseIf Val(Month(Now))=m And Val(Day(Now)) >=d Then '当前月份和出生月份相等,而且当前日期不小于出生日期,说明正好是生日或者已经过了生日

  temp=Val(Year(Now)) - y

  Else '除此之外,没有到生日

  temp=Val(Year(Now)) - y - 1

  End If

  GetIDcardInfo=temp

  Exit Function

  End If

  If GetType=6 Then '不考虑生日因素时,直接年份相减求年龄

  If Len(str)=15 Then

  temp=Val(Year(Now)) - Val("19" & Mid(str, 7, 2))

  ElseIf Len(str)=18 Then

  temp=Val(Year(Now)) - Val(Mid(str, 7, 4))

  End If

  GetIDcardInfo=temp

  Exit Function

  End If

  '处理星座

  If GetType=7 Then

  Dim XZ As Integer 'XZ=出生月*100+出生日,这样转为数值后容易判断和编程

  If Len(str)=15 Then

  XZ=Val(Mid(str, 9, 2)) * 100 + Val(Mid(str, 11, 2))

  ElseIf Len(str)=18 Then

  XZ=Val(Mid(str, 11, 2)) * 100 + Val(Mid(str, 13, 2))

  End If

  temp="号码错误"

  Select Case XZ

  Case 321 To 419

  temp="白羊座"

  Case 420 To 520

  temp="金牛座"

  Case 521 To 621

  temp="双子座"

  Case 622 To 722

  temp="巨蟹座"

  Case 723 To 822

  temp="狮子座"

  Case 823 To 922

  temp="处女座"

  Case 923 To 1023

  temp="天秤座"

  Case 1024 To 1122

  temp="天蝎座"

  Case 1123 To 1221

  temp="射手座"

  Case 1222 To 1231

  temp="魔羯座"

  Case 101 To 119

  temp="魔羯座"

  Case 120 To 218

  temp="水瓶座"

  Case 219 To 320

  temp="双鱼座"

  End Select

  GetIDcardInfo=temp

  Exit Function

  End If

  err: '错理处理

  If GetType=1 Or GetType=2 Then

  GetIDcardInfo="数据库中没有相关信息"

  Else

  GetIDcardInfo=""

  End If

  Application.ScreenUpdating=True '恢复屏幕更新

  End Function

  复制代码就行了。

 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站