Private Function CheckID(ByVal UserID As String) As Boolean
Dim AreaNo As Long
Dim I As Integer
Dim CheckSum As Long
Dim AreaCode As String
UserID = UCase(UserID)
AreaCode = Microsoft.VisualBasic.Left(UserID, 1)
CheckID = False
If Len(UserID) <> 10 Then
Return False '確定身證有10碼
End If
'If (AreaCode < "A" Or AreaCode > "Z") Then
' Return False '確定首碼在A-Z之間
'End If
'If Not IsNumeric(Mid(UserID, 2)) Then
' Exit Function '確定2-10碼是數字
'End If
'取得首碼對應的區域碼,A ->10, B->11, ..H->17,I->34, J->18...
AreaNo = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", AreaCode) + 9
UserID = CStr(AreaNo) + Mid(UserID, 2)
'取得CheckSum的值
CheckSum = CLng(Mid(UserID, 1, 1)) + CLng(Mid(UserID, 11, 1))
For I = 2 To 10
CheckSum = CheckSum + CLng(Mid(UserID, I, 1)) * (11 - I)
Next
CheckID = IIf(CheckSum Mod 10 = 0, True, False)
Return CheckID
End Function