10-4 常用資料規則

本節將對常用的資料規則進行說明,以便用於表單資料驗證之中,這些資料包含
  1. 身份證字號的檢查碼
  2. 一般信用卡的檢查碼

首先我們來看看身份證字號。一般而言,大家對身份字號的認知,多是知道共有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。

    例如: 身分證號碼是 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 (檢查碼)

Hint
上述範例中的身份證字號是我隨意取的,若剛好和你的身份證字號相同,請來信告知,我會立刻換掉。(我已經換過兩次了!)

再來我們看看有關於信用卡卡號的編碼規則。一般信用卡卡號都有 16 碼,其中最右邊一碼是檢查碼,而最左邊的開始幾個數字則是代表卡別,請見下表:

卡別位數規則
Visa Card16第一碼為 4。
Master Card16第一碼為 5,且前二碼介於 51 和 55 中間。
American Express15第一碼為 3,且前三碼介於 340 和 379 之間。
JCB Card15
15
16
第一碼為 1,且前四碼為 1800。
第一碼為 2,且前四碼為 2131。
第一碼為 3,且前三碼介於 300和399之間。

信用卡號的最後一個數字就是信用卡的檢查碼,根據非檢查碼的其它數字,我們就應該可以推算出檢查碼,其方法如下:

  1. 將信用卡的每個數字設定權重:從右向左,檢查碼除外,每個數字的權重分別是 2、1、2、1、2、1 ...。(若信用卡共有16碼,那麼最左邊數字的權重是 2;若信用卡卡號共有15碼,那麼最左邊數字的權重就是 1。)
  2. 將每個數字乘上權重,所得的加權數字若大於 9,那麼就從這加權數字裡扣除 9(或是將個位數和十位數相加)。
  3. 將所有處理過的加權數字全部加總起來,並且除以 10,取其餘數。
  4. 若餘數是 0,檢查碼就是 0,否則檢查碼就等於 10 減掉此餘數所得的值。
例如,若某一張 Visa 信用卡卡號是 4311-4656-0640-6131,則其計算過程如下:

卡號4311465606406131
1. 權重212121212121212x
2. 加權數字83218610
=>1
6068012
=>3
16x
3. 計算總和59
4. 計算檢查碼59 除以 10 的餘數是 9,所以檢查碼是 10 - 9 = 1。

上述過程所得到的檢查碼是 1,和原先信用卡卡號的檢查碼一致,因此可知道原信用卡的卡號符合編碼規則。

我們再使用一張美國運通卡(American Express)來進行測試,卡號是 3728 024906 54257(只有 15 碼),其計算過程如下:

卡號372802490654257
1. 權重12121212121212x
2. 加權數字314
=>5
216
=>7
04418
=>9
012
=>3
58210
=>1
x
3. 計算總和53
4. 計算檢查碼53 除以 10 的餘數是 3,所以檢查碼是 10 - 3 = 7。


JavaScript 程式設計與應用:用於網頁用戶端