張貼者:2010年5月29日 上午6:36Administrator ExcelHelp
[
Carson Cheng 已於 2011年1月19日 下午11:57 更新
]
在這個數碼年代,我們日常生活中都要面對許許多多的數字,身份證號碼是其一。 香港身份證號碼後端,有一雙括號,括號內有一個數字(或「A」字),叫「校檢碼(Check Digit)」,許多人都只知其名,而不知其義,這次就讓我介紹一下。 在輸入資料時,如果由人手輸入,錯誤的機會當然大,就算利用條碼 (Barcode) 也難保輸入無誤,所以校檢碼就應運而生。透過一條公式,我們把一組數字轉化成一個校檢碼,如果這組數字內有任何一個數字改變了,公式就會產生一個不一樣的校檢碼(如果這條公式會產生一個跟原來一樣的校檢碼,這條公式就不可以接受)。 當你輸入了一個身份證號碼(包括校檢碼),電腦可以馬上運用公式把括號前端的字母和數字算出一個校檢碼,如果這個校檢碼跟括號內的校檢碼一樣,那就代表正確的機會很大;相反,如果不一致的話,就可以肯定輸入的號碼是錯誤的。 校檢碼的公式不很複雜,用一個例子說明就很容易理解:
而當前方有一個X時,則在累積數加上6:
註:
- 第二個英文字母的代表數字:A為1,B為2,C為3,如此類推。
- 英文字母可以是兩個位,絕大部分人的身份證都只有一個位。
- 校檢碼如果是10,用「A」代表;是11的話,用「0」代表。
示範
程式碼如下: ' HKID 決定輸入裡的香港身份證編號是否正確 ' 輸入:sInput: "AA999999(9)" 或 "A999999(9)" ' 輸出:香港身份證編號是否正確 Function HKID(sInput As String) As Boolean Dim iAcc As Integer ' 累加變數 Dim sCheck As String Dim i As Integer
' 如果sInput只有10位(包括括號),則在前面多加一個空位 If Len(sInput) = 10 Then sInput = " " & sInput ' 如果sInput的文字長度是11,且第一個字母不是X就是空格,且文字中第9和11位的是括號, ' 則繼續運算,否則已經可確定sInput是錯誤的。 If Len(sInput) = 11 And (Left(sInput, 1) = " " Or Left(sInput, 1) = "X") And _ Mid(sInput, 9, 1) = "(" And Right(sInput, 1) = ")" Then ' 起始化 sInput = UCase(sInput) ' 把英文都轉成大草 sCheck = Mid(sInput, 10, 1) ' 校檢碼 iAcc = 0 ' 累加變數 ' 英文部分(第1、2位) ' 第一個字母:如果是X的話,則加上6 If Left(sInput, 1) = "X" Then iAcc = iAcc + 6 ' 第二個字母:A 代表 1; B 代表 2 如此類推,然後乘上8 iAcc = iAcc + (Asc(Mid(sInput, 2, 1)) - 64) * 8 ' 數字部分(第3到8位) ' 第一個數字(由左至右)乘上7,第二個數字乘上6,如此類推 For i = 3 To 8 iAcc = iAcc + Val(Mid(sInput, i, 1)) * (10 - i) Next i ' 校檢碼等於11減去累積數除以11的餘數,會得出一個1至11的數字 iAcc = 11 - iAcc Mod 11 ' 看看這裡算出的校檢碼與輸入的是否一致 ' 如果算出的校檢碼是10的話,則用"A"代表;是11的話,則用0代表。 Select Case iAcc Case 10 HKID = (sCheck = "A") Case 11 HKID = (sCheck = "0") Case Else HKID = (sCheck = Trim(Str(iAcc Mod 10))) End Select Else HKID = False End If End Function
我現在還沒有弄清楚第一個英文字母的計算方法,主要是不知道是否只可以是「X」,如有錯誤,請不吝指正!在此特別謝謝Frankie Wong!
|
|
|
|
|
 Updating...
Administrator ExcelHelp, 2010年5月29日 上午6:37
|