在Excel中检验身份证号

时间:2022-11-07 20:26:39
  近几日,我的工作是录入更正的农业直补农户资料,涉及到了各包村*上报的各种样式的报表,经会计清点后,由我来统一按上报的格式来摘抄到上报表中。据会计说,我的字写得还过得去,比小代强。
  我建议用计算机来处理,打字比写字可快多了,还清楚。
  下面的工作,就是录入一大堆的编号和身份证号以及姓名。姓名不是难事,在录入几十个后,我越发的想去上网,把读霸安装上,我打它来读,这样就不用抬头看屏幕了。想到乡里网吧的半个小时打开一封邮件的速度呀,我还是放弃了。
  身份证可是不能再错误了,幸好我的电子书里有一段关于身份证格式的说明和程序,在稍加修改后,它已经可以用来批量的判断身份证是不是有格式(包括长度,出生年月,验证位)的错误。
  本想通过数据有效性来作,只是公式里不能调用VBA的函数,真是郁闷。
 
  下次有机会,改写一个公式来判断的。
 
 
在Excel中检验身份证号Sub  检验选定区域身份证()
在Excel中检验身份证号
'
在Excel中检验身份证号'
 检验身份证 Macro
在Excel中检验身份证号'
 用于检测身份证号码是否正确
在Excel中检验身份证号'
在Excel中检验身份证号'
 快捷键: Ctrl+q
在Excel中检验身份证号'
在Excel中检验身份证号
Dim  arange  As  range
在Excel中检验身份证号
Dim  acell  As  range
在Excel中检验身份证号
Dim  ret  As   Integer
在Excel中检验身份证号
Set  arange  =  Selection
在Excel中检验身份证号
For   Each  acell In arange.Cells
在Excel中检验身份证号  
' MsgBox ActiveCell.Text
在Excel中检验身份证号
    ret  =  IDCheck( UCase (acell.Text))
在Excel中检验身份证号    
If  ret  <>   0   Then
在Excel中检验身份证号        acell.Select
在Excel中检验身份证号        
MsgBox   " 请检查当前选定单元格的身份证是否正确 " , ,  " 提示 "
在Excel中检验身份证号        
Exit   Sub
在Excel中检验身份证号    
End   If
在Excel中检验身份证号    
在Excel中检验身份证号    
在Excel中检验身份证号
Next
在Excel中检验身份证号    
MsgBox   " 全部正确 " , ,  " 提示 "
在Excel中检验身份证号
End Sub
在Excel中检验身份证号
Function  CurrentIdCheck()  As   Integer
在Excel中检验身份证号
Dim  ret  As   Integer
在Excel中检验身份证号
' MsgBox ActiveCell.Text
在Excel中检验身份证号'
ret = IDCheck(ActiveCell.Text)
在Excel中检验身份证号'
MsgBox ret
在Excel中检验身份证号'
CurrentIdCheck = ret
在Excel中检验身份证号
CurrentIdCheck  =   0
在Excel中检验身份证号
End Function
在Excel中检验身份证号
Function  IDCheck(ByVal e  As   String As   Integer
在Excel中检验身份证号 
Dim  arrVerifyCode
在Excel中检验身份证号 
Dim  Wi
在Excel中检验身份证号 
Dim  Checker
在Excel中检验身份证号 
Dim  BirthDay
在Excel中检验身份证号 IDCheck 
=   0   ' 验证通过时返回
在Excel中检验身份证号
 arrVerifyCode  =   Split ( " 1,0,X,9,8,7,6,5,4,3,2 " " , " )
在Excel中检验身份证号 Wi 
=   Split ( " 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 " " , " )
在Excel中检验身份证号 Checker 
=   Split ( " 1,9,8,7,6,5,4,3,2,1,1 " " , " )
在Excel中检验身份证号 
If   Len (e)  <   15   Or   Len (e)  =   16   Or   Len (e)  =   17   Or   Len (e)  >   18   Then
在Excel中检验身份证号 
' IDCheck= "身份证号必须是15位数或18位数!"
在Excel中检验身份证号
 IDCheck  =   1
在Excel中检验身份证号 
Exit   Function
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
Dim  Ai  As   String
在Excel中检验身份证号 
If   Len (e)  =   18   Then
在Excel中检验身份证号 Ai 
=   Mid (e,  1 17 )
在Excel中检验身份证号 
ElseIf   Len (e)  =   15   Then
在Excel中检验身份证号 Ai 
=   CStr (e)
在Excel中检验身份证号 Ai 
=   Left (Ai,  6 &   " 19 "   &   Mid (Ai,  7 9 )
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
If   Not   IsNumeric (Ai)  Then
在Excel中检验身份证号 
' IDCheck= "身份证除最后一位外,必须为数字!"
在Excel中检验身份证号
 IDCheck  =   2
在Excel中检验身份证号 
Exit   Function
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
Dim  strYear  As   Integer
在Excel中检验身份证号 
Dim  strMonth  As   Integer
在Excel中检验身份证号 
Dim  strDay  As   Integer
在Excel中检验身份证号 strYear 
=   CInt ( Mid (Ai,  7 4 ))
在Excel中检验身份证号 strMonth 
=   CInt ( Mid (Ai,  11 2 ))
在Excel中检验身份证号 strDay 
=   CInt ( Mid (Ai,  13 2 ))
在Excel中检验身份证号 BirthDay 
=   Trim (strYear)  +   " - "   +   Trim (strMonth)  +   " - "   +   Trim (strDay)
在Excel中检验身份证号 
If   IsDate (BirthDay)  Then
在Excel中检验身份证号 
If   DateDiff ( " yyyy " Now (),  CDate (BirthDay))  <   - 140   Or   CDate (BirthDay)  >   Now ()  Then
在Excel中检验身份证号 
' IDCheck= "身份证输入错误(日期输入错误)!"
在Excel中检验身份证号
 IDCheck  =   3
在Excel中检验身份证号 
Exit   Function
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
If  strMonth  >   12   Or  strDay  >   31   Then
在Excel中检验身份证号 
' IDCheck= "身份证输入错误(日期输入错误)!"
在Excel中检验身份证号
 IDCheck  =   3
在Excel中检验身份证号 
Exit   Function
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
Else
在Excel中检验身份证号 
' IDCheck= "身份证输入错误(日期输入错误)!"
在Excel中检验身份证号
 IDCheck  =   3
在Excel中检验身份证号 
Exit   Function
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
Dim  i  As   Integer
在Excel中检验身份证号 
Dim  TotalmulAiWi  As   Integer
在Excel中检验身份证号 
For  i  =   0   To   16
在Excel中检验身份证号 TotalmulAiWi 
=  TotalmulAiWi  +   CInt ( Mid (Ai, i  +   1 1 ))  *   CInt (Wi(i))
在Excel中检验身份证号 
Next
在Excel中检验身份证号 
Dim  modValue  As   Integer
在Excel中检验身份证号 modValue 
=  TotalmulAiWi  Mod   11
在Excel中检验身份证号 
Dim  strVerifyCode  '  As Object
在Excel中检验身份证号
 strVerifyCode  =  arrVerifyCode(modValue)
在Excel中检验身份证号 Ai 
=  Ai  &  strVerifyCode
在Excel中检验身份证号 
If   Len (e)  =   18   And   CStr (e)  <>  Ai  Then
在Excel中检验身份证号 
' IDCheck= "身份证号码输入错误(身份证包含有非法字符)!"
在Excel中检验身份证号
 IDCheck  =   4
在Excel中检验身份证号 
Exit   Function
在Excel中检验身份证号 
End   If
在Excel中检验身份证号 
End Function