close

Chapter
Section

VBA08:身份證字號驗證

示範檔

範例檔

VBA08.XLSX

結果檔

1.   身份證字號規則說明

要如何確認一組身分證號碼是否合法??

1.  目前的中華民國身分證字號一共有十碼,包括為首的一個大寫英文字母與接連的九個阿拉伯數字。

(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) 而首位數字則是拿來區分性別,1為男性、2為女性,

2.規則說明:

(1) 英文轉成的數字, 個位數乘9再加上十位數。

(2) 各數字從左到右依次乘以8、7、6、5、4、3、2、1、1(這位數乘不乘沒關係)

(3) 求出(1),(2)之和

(4) 求出(3)10後之餘數,10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是0

3.範例:

A

1

2

3

1

1

9

4

5

0

 

1

0

 

9

8

7

6

5

4

3

2

1

1

1

0

8

14

18

5

4

27

8

5

0

90

90/10 餘數為010-0=10,檢查碼為0

2.   VBA-自訂函數(身份證字號)

Function 身份證字號(IDNUM) As String    自訂函數(身份證字號)是文字型態

Dim X,y, S, NO, TOTAL                   宣告有X,y,S,NO,TOTAL5個變數

S = Left(IDNUM, 1)                      設定S擷取IDNUM變數的左邊1個字

NO = Mid(IDNUM, 2, 9)                   設定NO擷取IDNUM變數的第2個字開始的9個字。

Select Case S                           設定變數S為各種英文字母時XY變數值。

    Case "A"

        X = 1

        y = 0

    Case "B"

        X = 1

        y = 1

    Case "C"

        X = 1

        y = 2

    Case "D"

        X = 1

        y = 3

    Case "E"

        X = 1

        y = 4

    Case "F"

        X = 1

        y = 5

    Case "G"

        X = 1

        y = 6

    Case "H"

        X = 1

        y = 7

    Case "I"

        X = 3

        y = 4

    Case "J"

        X = 1

        y = 8

    Case "K"

        X = 1

        y = 9

    Case "L"

        X = 2

        y = 0

    Case "M"

        X = 2

        y = 1

    Case "N"

        X = 2

        y = 2

    Case "O"

        X = 3

        y = 5

    Case "P"

        X = 2

        y = 3

    Case "Q"

        X = 2

        y = 4

    Case "R"

        X = 2

        y = 5

    Case "S"

        X = 2

        y = 6

    Case "T"

        X = 2

        y = 7

    Case "U"

        X = 2

        y = 8

    Case "V"

        X = 2

        y = 9

    Case "W"

        X = 3

        y = 2

    Case "X"

        X = 3

        y = 0

    Case "Y"

        X = 3

        y = 1

    Case "Z"

        X = 3

        y = 3

End Select

TOTAL = X + (y * 9) + (Mid(NO, 1, 1) * 8) + (Mid(NO, 2, 1) * 7) + (Mid(NO, 3, 1) * 6) + (Mid(NO, 4, 1) * 5) + (Mid(NO, 5, 1) * 4) + (Mid(NO, 6, 1) * 3) + (Mid(NO, 7, 1) * 2) + Mid(NO, 8, 1) + Mid(NO, 9, 1)

設定TOTAL變數的計算公式

If Right(TOTAL, 1) <> 0 Then          判斷TOTAL變數的最後一個數值是否為0

    MsgBox ("您的身份證字號有誤")     若不為0顯示"您的身份證字號有誤"字串

End If

End Function

 

3.   VBA 巨集(IDNUM)

Sub IDNUM()

Dim IDNUM As String * 10

IDNUM = InputBox("請輸入身份證字號","身份證字號")

Dim X, y, S, NO, TOTAL

S = Left(IDNUM, 1)

NO = Mid(IDNUM, 2, 9)

Select Case S

    Case "A"

        X = 1

        y = 0

    Case "B"

        X = 1

        y = 1

    Case "C"

        X = 1

        y = 2

    Case "D"

        X = 1

        y = 3

    Case "E"

        X = 1

        y = 4

    Case "F"

        X = 1

        y = 5

    Case "G"

        X = 1

        y = 6

    Case "H"

        X = 1

        y = 7

    Case "I"

        X = 3

        y = 4

    Case "J"

        X = 1

        y = 8

    Case "K"

        X = 1

        y = 9

    Case "L"

        X = 2

        y = 0

    Case "M"

        X = 2

        y = 1

    Case "N"

        X = 2

        y = 2

    Case "O"

        X = 3

        y = 5

    Case "P"

        X = 2

        y = 3

    Case "Q"

        X = 2

        y = 4

    Case "R"

        X = 2

        y = 5

    Case "S"

        X = 2

        y = 6

    Case "T"

        X = 2

        y = 7

    Case "U"

        X = 2

        y = 8

    Case "V"

        X = 2

        y = 9

    Case "W"

        X = 3

        y = 2

    Case "X"

        X = 3

        y = 0

    Case "Y"

        X = 3

        y = 1

    Case "Z"

        X = 3

        y = 3

End Select

TOTAL = X + (y * 9) + (Mid(NO, 1, 1) * 8) + (Mid(NO, 2, 1) * 7) + (Mid(NO, 3, 1) * 6) + (Mid(NO, 4, 1) * 5) + (Mid(NO, 5, 1) * 4) + (Mid(NO, 6, 1) * 3) + (Mid(NO, 7, 1) * 2) + Mid(NO, 8, 1) + Mid(NO, 9, 1)

If Right(TOTAL, 1) <> 0 Then

    MsgBox ("您的身份證字號有誤")

End If

End Sub


arrow
arrow

    錦子老師 發表在 痞客邦 留言(0) 人氣()