身份证号码验证 -- (精华代码)

网络整理 - 08-30

Function checkIDCard(idcard) '-1为正确的身份证,否则为非法身份证
  
  Dim Y, JYM
  Dim S, M
  
  Dim area
  area = "11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91"
  Dim ereg
  Set ereg = New regexp
  
  '地区检验
  If InStr(1, area, Mid(idcard, 1, 2)) = 0 Then checkIDCard = 1: Exit Function
  
  '身份号码位数及格式检验
  Select Case Len(idcard)
  Case 15
    If ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0 Or ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 100 = 0 And (CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0)) Then
    ereg.Pattern = "^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$" ';//测试出生日期的合法性
    Else
    ereg.Pattern = "^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$" ';//测试出生日期的合法性
    End If
    If (ereg.test(idcard)) Then
      checkIDCard = -1
    Else
      checkIDCard = 2
    End If
  Case 18
    '//18位身份号码检测
    '//出生日期的合法性检查