身份證驗證

摘要:身份證驗證

身分證號碼的驗證規則


    一般而言大家對身份字號的認知,多是知道共有10位,位第一位為英文字母,知道再多一點的大概就是第二個數字是男女生之分,男生為 1,女生為 2,接下來的一陀數字,是不是隨便輸入都可以呢?其實是不可以的。

    身份證字號後面八個數字不是隨便打一些數字就可以了,其實前面七個可以隨便打,但是最後一位為檢查碼,必須經過之前一個字母與8個數字的組合計算後得出,以下即為檢查碼的運算原則:

 

  1. 英文代號以下表轉換成數字 : A=10 台北市 J=18 新竹縣 S=26 高雄縣 B=11 台中市 K=19 苗栗縣 T=27 屏東縣 C=12 基隆市 L=20 台中縣 U=28 花蓮縣 D=13 台南市 M=21 南投縣 V=29 台東縣 E=14 高雄市 N=22 彰化縣 * W=32 金門縣 F=15 台北縣 * O=35 新竹市 X=30 澎湖縣 G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山 H=17 桃園縣 Q=24 嘉義縣 * Z=33 連江縣 * I=34 嘉義市 R=25 台南縣。
  2. 英文轉成的數字, 個位數乘9再加上十位數。
  3. 各數字從右到左依次乘1、2、3、4....8。
  4. 求出(2),(3)之和 。
  5. 求出(4)除10後之餘數,用10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是 0。

    例如: 身分證號碼是  F121955337

                                F   1 2 1 9 5 5 3 3    

                                1 5 x x x x x x x x x x

                                1 9 8 7 6 5 4 3 2 1

                 ─────────────────────

                            1+45+8+14+6+45+20+15+6+3=163

163/10=16....3 (餘數)

10-3=7 (檢查碼)

      =========================================================================

(1)身份證驗證 :

 

Code:

 

Public Class Form5

    '儲存第一碼(地址碼)所對應到的2碼數字.
    Dim auth() As String = New String(25) {"A10", "J18", "S26", "B11", "K19", "T27", "C12", "L20", "U28", "D13", "M21", "V29", "E14", "N22", "W32", "F15", "O35", "X30", "G16", "P23", "Y31", "H17", "Q24", "Z33", "I34", "R25"}


    Dim str As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim i As Integer
        Dim a, b, ck As Double

        str = Mid(TextBox1.Text, 1, 1)    '取得第一碼英文字母.

        For i = 0 To UBound(auth)
            If str = Mid(auth(i), 1, 1) Then
   '比對陣列元素第一碼.
                a = Val(Mid(auth(i), 2, 1))      'a,b代表對映到的2碼.
                b = Val(Mid(auth(i), 3, 1))

                ' 驗證規則.
                ck = 10 - ((a + (b * 9 + Mid(TextBox1.Text, 2, 1) * 8 + Mid(TextBox1.Text, 3, 1) * 7 + Mid(TextBox1.Text, 4, 1) * 6 + Mid(TextBox1.Text, 5, 1) * 5 + Mid(TextBox1.Text, 6, 1) * 4 + Mid(TextBox1.Text, 7, 1) * 3 + Mid(TextBox1.Text, 8, 1) * 2 + Mid(TextBox1.Text, 9, 1) * 1)) Mod 10) 'Mid(TextBox1.Text,10,1) 為檢查碼. 

                If ck = Mid(TextBox1.Text, 10, 1) Then '取得第十碼檢查碼做比對.
                    MsgBox("驗證成功!" & "檢查碼是 :" & ck)
                Else
                    MsgBox("驗證失敗!")
                End If
            End If

        Next

    End Sub


End Class

===========================================

設計心得 :
(1) 字串拆解比對應用.
(2) 一維陣列的走訪(Traverse)應用. PS : 在迴圈內逐一比對陣列元素.
 

 

凡事,總有更輕鬆的解決方法。