[VB.net]身分證字號驗證程序(二)- 改用 Class 重寫及加入產生新字號的功能

前文貼了身分證字號基本的驗證部分,這幾天又加上了「字串產生器」功能並且重做了介面。非專業製作的效果及功能未盡完美是必然的,不過還是要分享一下過程和經驗。

身分證字號驗證程序(一)用函式做出了基本的驗證部分,這幾天又加上了「字串產生器」功能並且重做了介面。

非專業製作的效果及功能未盡完美是必然的,不過還是要分享一下過程和經驗。

 

成品長得樣子:
image image

 

新增的部分:

  1. 輸入防呆不是輸入後再驗證,改採用前置驗證方式從 Keypress 攔截 Key In 的字元,若正確才允許輸入。
  2. 輸入時先做字元判斷,例如第一字元應為 A-z,第二字元應為 1-2,之後8個字元都應是數字。
  3. 輸入未滿十個字元時只做格式檢查,完整輸入後再驗算檢查碼。
  4. 輸入時在下方「產生器」欄內同步產生縣市、性別及前置數字,並以當下內容建立條件,按下 Button 可立即產生正確字組。
  5. 點選產生的數組會自動送到驗證區進行檢查碼驗證。(其實應該都是正確的啦,否則就是程式有 Bug 了)
  6. 加上了點部落格的連結,和寄送 Mail 的連結。
  7. 改善了介面外觀。

 

程式碼部分:

  1. 輸入防呆不是輸入後再驗證,採用前置驗證方式從 Keypress 攔截 Key In 的字元,若正確才允許輸入。
    這個方法是我寫程式以來用過的最簡便手法,一行搞定。

    
            e.KeyChar = IIf(InStr("0123456789" & vbBack, e.KeyChar), e.KeyChar, "")
    


  2. 輸入時先做字元判斷,例如第一字元應為 A-z,第二字元應為 1-2,之後8個字元都應是數字。

    
        '---輸入防呆(根據輸入位置動態改變過濾字元集)---
        Private Sub T1_輸入字元限制(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) _
            Handles txt_輸入號碼.KeyPress
            Dim tBox = DirectCast(sender, TextBox)
            e.KeyChar = UCase(e.KeyChar)
            Select Case tBox.SelectionStart
                Case 0 : tBox.Tag = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                Case 1 : tBox.Tag = "12"
                Case Else : tBox.Tag = "0123456789"
            End Select
            e.KeyChar = IIf(InStr(tBox.Tag & vbBack, e.KeyChar), e.KeyChar, "")
        End Sub

  3. 只允許輸入數字的做法(若要過濾其他字元,改那個 “0123456789”就成了。)

    
        '---輸入防呆(限制輸入為數字)---
        Private Sub T2_輸入字元限制(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) _
            Handles txt_前置篩選數字.KeyPress, cmb_產生筆數.KeyPress
            e.KeyChar = IIf(InStr("0123456789" & vbBack, e.KeyChar), e.KeyChar, "")
        End Sub
    
  4. 輸入未滿十個字元時只做格式檢查,完整輸入後再做檢查碼驗算。

    
        '----輸入防呆(控制項的互動邏輯)---
        Private Sub 輸入號碼改變(sender As System.Object, e As System.EventArgs) _
            Handles txt_輸入號碼.TextChanged
            Dim str = DirectCast(sender, TextBox).Text
            lbl_戶籍地.Text = ""
            lbl_性別.Text = ""
            If Len(str) < 10 Then
                lbl_完整驗證.Text = "輸入的號碼不完全(或格式錯誤)。"
                lbl_完整驗證.ForeColor = Color.Blue
            Else
                身分證元件.身分證號碼 = str
                lbl_完整驗證.Text = "這個身分證字號是" & IIf(身分證元件.驗證結果, "正確的。", "錯誤的!") & ""
                lbl_完整驗證.ForeColor = IIf(身分證元件.驗證結果, Color.Green, Color.Red)
            End If
            If str <> "" Then
                Try
                    If Len(str) >= 1 Then
                        lbl_戶籍地.Text = 身分證元件.所有縣市名稱(Asc(str.First) - 65)
                        cmb_縣市.Text = lbl_戶籍地.Text
                    End If
                    If Len(str) >= 2 Then
                        Dim c As Integer = InStr("12", Mid(str, 2, 1))
                        If c Then
                            lbl_性別.Text = Mid("男女", c, 1)
                            cmb_性別.Text = lbl_性別.Text
                        End If
                        If 同步更新篩選欄 Then
                            txt_前置篩選數字.Text = Mid(str, 3, 7)
                        End If
                    End If
                Catch ex As Exception
                End Try
            End If
        End Sub

  5. 數組產生後,點選後自動送到驗證區進行檢查碼驗證。

    
        '---當列表中的項目被選定---
        Private Sub 輸出到列表() Handles lst_輸出列表.SelectedIndexChanged
            同步更新篩選欄 = False
            txt_輸入號碼.Text = lst_輸出列表.Text
        End Sub


  6. 加上了點部落格的連結,和寄送 Mail 的連結(下方的網址連結用左右鍵分別,上方小圖直接連結到目的)。

    
        Private Sub LinkLabel1_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
            Select Case e.Button
                Case MouseButtons.Left : 到網址()
                Case MouseButtons.Right : 寄信件()
            End Select
        End Sub
        Private Sub 到網址() Handles pic_到網址.Click
            Process.Start("http://www.dotblogs.com.tw/ku3")
        End Sub
        Private Sub 寄信件() Handles pic_寄信件.Click
            Process.Start("mailto://ku3@teamsoftex.com?Subject=網路來函(About.." & 程式名稱 & ")")
        End Sub


Class 的程式碼及表單程式碼就不貼了,有興趣的朋友可直下載專案原始檔參考。

 

專案原始碼下載:[身分證驗證_專案原始檔.rar
Demo 程下載:[身分證驗證_demo.rar

 

 


ku3