Chapter | 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 餘數為0,10-0=10,檢查碼為0
2. VBA-自訂函數(身份證字號)
Function 身份證字號(IDNUM) As String ‘自訂函數(身份證字號)是文字型態
Dim X,y, S, NO, TOTAL ‘宣告有X,y,S,NO,TOTAL等5個變數
S = Left(IDNUM, 1) ‘設定S擷取IDNUM變數的左邊1個字
NO = Mid(IDNUM, 2, 9) ‘設定NO擷取IDNUM變數的第2個字開始的9個字。
Select Case S ‘設定變數S為各種英文字母時X及Y變數值。
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
留言列表