本節將對常用的資料規則進行說明,以便用於表單資料驗證之中,這些資料包含
- 身份證字號的檢查碼
- 一般信用卡的檢查碼
首先我們來看看身份證字號。一般而言,大家對身份字號的認知,多是知道共有10位,第一位為英文字母,知道再多一點的大概就是第二個數字是男女生之分,男生為 1,女生為 2,接下來的一串數字,是不是隨便輸入都可以呢?其實是不可以的。身份證字號後面八個數字不是隨便打一些數字就可以了,其實前面七個可以隨便打,但是最後一位為檢查碼,必須經過之前一個字母與 8 個數字的組合計算後得出,以下即為檢查碼的運算原則:
- 英文代號以下表轉換成數字(代表出生時的戶籍所在地):
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 台南縣 - 英文轉成的數字,個位數乘9再加上十位數
- 各數字從右到左依次乘1、2、3、4....8
- 求出(2)、(3)之和
- 求出(4)除10後之餘數,用10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是 0。
例如: 身分證號碼是 W100232754
W 1 0 0 2 3 2 7 5 3 2 X X X X X X X X X X 1 9 8 7 6 5 4 3 2 1 ───────────────────── 3 +18 + 8 + 0 + 0 +10 +12 + 6 +14 + 5 =76 76/10=7....6 (餘數) 10-6=4 (檢查碼)
再來我們看看有關於信用卡卡號的編碼規則。一般信用卡卡號都有 16 碼,其中最右邊一碼是檢查碼,而最左邊的開始幾個數字則是代表卡別,請見下表:
卡別 位數 規則 Visa Card 16 第一碼為 4。 Master Card 16 第一碼為 5,且前二碼介於 51 和 55 中間。 American Express 15 第一碼為 3,且前三碼介於 340 和 379 之間。 JCB Card 15
15
16第一碼為 1,且前四碼為 1800。
第一碼為 2,且前四碼為 2131。
第一碼為 3,且前三碼介於 300和399之間。信用卡號的最後一個數字就是信用卡的檢查碼,根據非檢查碼的其它數字,我們就應該可以推算出檢查碼,其方法如下:
例如,若某一張 Visa 信用卡卡號是 4311-4656-0640-6131,則其計算過程如下:
- 將信用卡的每個數字設定權重:從右向左,檢查碼除外,每個數字的權重分別是 2、1、2、1、2、1 ...。(若信用卡共有16碼,那麼最左邊數字的權重是 2;若信用卡卡號共有15碼,那麼最左邊數字的權重就是 1。)
- 將每個數字乘上權重,所得的加權數字若大於 9,那麼就從這加權數字裡扣除 9(或是將個位數和十位數相加)。
- 將所有處理過的加權數字全部加總起來,並且除以 10,取其餘數。
- 若餘數是 0,檢查碼就是 0,否則檢查碼就等於 10 減掉此餘數所得的值。
卡號 4 3 1 1 4 6 5 6 0 6 4 0 6 1 3 1 1. 權重 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 x 2. 加權數字 8 3 2 1 8 6 10
=>16 0 6 8 0 12
=>31 6 x 3. 計算總和 59 4. 計算檢查碼 59 除以 10 的餘數是 9,所以檢查碼是 10 - 9 = 1。 上述過程所得到的檢查碼是 1,和原先信用卡卡號的檢查碼一致,因此可知道原信用卡的卡號符合編碼規則。
我們再使用一張美國運通卡(American Express)來進行測試,卡號是 3728 024906 54257(只有 15 碼),其計算過程如下:
卡號 3 7 2 8 0 2 4 9 0 6 5 4 2 5 7 1. 權重 1 2 1 2 1 2 1 2 1 2 1 2 1 2 x 2. 加權數字 3 14
=>52 16
=>70 4 4 18
=>90 12
=>35 8 2 10
=>1x 3. 計算總和 53 4. 計算檢查碼 53 除以 10 的餘數是 3,所以檢查碼是 10 - 3 = 7。
JavaScript 程式設計與應用:用於網頁用戶端