返回列表 上一主題 發帖

[發問] 身分證代碼

回復 1# cypd
你要先說明身分證的檢核規則。
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

Private Sub Worksheet_Change(ByVal Target As Range)
Dim T, i%, S
With Target
   If .Count > 1 Then Exit Sub
   If Intersect([H5:H6], .Cells) Is Nothing Then Exit Sub
   Application.EnableEvents = False
   .Value = UCase(.Value)
   Application.EnableEvents = True
      
   If Not .Value Like "[A-Z]#########" Then MsgBox "身份證輸入錯誤!!": Exit Sub
   T = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", Left(.Value, 1)) + 9 & Mid(.Value, 2, 8)
   For i = 1 To 10
     S = S + Mid(T, i, 1) * Left(11 - i, 1)
   Next i
   T = Right(10 - Right(S, 1), 1)
   If T <> Mid(.Value, 10, 1) Then MsgBox "身份證字號錯誤!檢查碼:" & T
End With
End Sub

TOP

回復 12# 准提部林
:loveliness:
真的太神了!!
感謝ML089、rouber590324、准提部林等先進的指導
所提出的疑問
已經獲得完美的解決
感恩  ^^

TOP

回復 12# 准提部林


    Private Sub Worksheet_Change(ByVal Target As Range) '借戶身分證檢查
Dim T, i%, S
With Target
      If .Count > 1 Then Exit Sub
      If Intersect([B5], .Cells) Is Nothing Then Exit Sub
      Application.EnableEvents = False
      .Value = UCase(.Value)
      Application.EnableEvents = True
      
      If Not .Value Like "[A-Z]#########" Then MsgBox "身份證輸入錯誤!!": Exit Sub
      T = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", Left(.Value, 1)) + 9 & Mid(.Value, 2, 8)
      For i = 1 To 10
          S = S + Mid(T, i, 1) * Left(11 - i, 1)
      Next i
      T = Right(10 - Right(S, 1), 1)
      If T <> Mid(.Value, 10, 1) Then MsgBox "身份證字號錯誤!檢查碼:" & T
End With

如果另外要在加入
[B5]及
[B51] ~[P51]15個身份證檢查
VBA要如何加入呢???

TOP

回復 14# sillykin


    巳解決

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題