信用卡號驗證器|Luhn演算法・卡組織識別

輸入信用卡號即可通過Luhn演算法驗證校驗位,並自動識別Visa、Mastercard、Amex等卡組織。也適合用於表單校驗邏輯的測試。

[[ labels.client_side_note ]]

[[ labels.format_error ]]
[[ labels.sample_label ]]:
[[ labels.no_input ]]

[[ labels.result_label ]]

[[ labels.formatted_label ]] [[ result.formatted ]]
[[ labels.brand_label ]] [[ brandName ]] [[ labels.brand_unknown ]]
[[ labels.checksum_label ]] ✓ [[ labels.checksum_valid ]] ✗ [[ labels.checksum_invalid ]]

支援的品牌與判定條件(IIN・位數)

品牌 開頭數字(IIN) 位數
Visa 4 13, 16, 19
Mastercard 51–55, 2221–2720 16
American Express 34, 37 15
Discover 6011, 644–649, 65 16–19
JCB 3528–3589 16–19
Diners Club 300–305, 3095, 36, 38, 39 14–19
UnionPay 62 16–19

什麼是信用卡號驗證工具

信用卡號的末位嵌有用於檢出輸入錯誤的檢查碼。以名為 Luhn 演算法的計算式對數位排列加以驗證,即可發現大多數一位數的誤輸入以及相鄰數位互換的情況。本工具在輸入號碼後執行該驗證,並同時依據開頭數字與位數判定卡片品牌。

重要的是,這僅僅是格式上的驗證。即便通過了 Luhn 檢查,該號碼也未必對應真實存在的卡片,更無從得知是否可用。實際的授權確認必須透過金流服務商的 API 進行。輸入的號碼僅在瀏覽器內處理,不會傳送至外部。

驗證卡號的步驟

  1. 輸入號碼 即便含有空格或連字號也會被自動去除,因此可把複製的值直接貼上。
  2. 查看檢查碼的結果 基於 Luhn 演算法的驗證結果會顯示為有效或無效。若為無效,則表示某一數位存在錯誤。
  3. 確認品牌判定 依據開頭數字與位數推定品牌。下方的對照表中也可確認判定條件。
  4. 用範例試驗行為 可透過範例按鈕輸入測試號碼,無須使用真實號碼即可確認工具的行為。

用好本工具的小技巧

  • 請勿輸入真實卡號,可點選示例按鈕使用公開的測試號碼(如Visa: 4111 1111 1111 1111)來體驗功能。
  • 即使號碼中包含空格或連字元,也會自動去除後再判斷,可直接貼上複製來的號碼。
  • 本工具僅通過Luhn演算法進行格式校驗,實際的信用核實、餘額查詢請使用支付服務商提供的API。
  • 在開發表單校驗邏輯時,可用本工具分別生成有效與無效的號碼,方便測試正常和異常兩種情況。

信用卡號驗證工具的應用情境

實作表單的輸入驗證

可與自行撰寫的驗證判定結果相互對照。正常與異常兩類案例都能準備後逐一確認。

確認品牌判定的邏輯

可在對照表中確認由開頭數字與位數會得出哪個品牌,可用於卡片圖示的分支顯示實作。

排查輸入錯誤

付款未能通過時,可先確認號碼本身的格式是否有誤,從而加快原因的排查。

學習 Luhn 演算法

試著輸入僅改動一位的號碼,即可實際看到驗證轉為無效的過程,有助於理解其原理。

信用卡號相關用語

Luhn 演算法
用於確認數位排列是否妥當的計算方法。自右起每隔一位乘以2後求和,若能被10整除則判定為有效。
檢查碼
為檢出輸入錯誤而附在末位的數字。由其他數位透過計算導出。
IIN
位於卡號開頭的發卡機構識別號。透過該部分可判別品牌與發卡方。
品牌
Visa、Mastercard、American Express 等國際品牌。由開頭數字與位數的組合判定。
授權確認
確認該卡是否實際可用、額度是否充足的處理。與格式驗證是完全不同的手續。

常見問題

不能。本工具只進行Luhn演算法的格式校驗,無法判斷該卡是否真實存在、是否已被停用,或餘額是否充足。真正的信用核實需要通過支付服務商的認證系統完成。

輸入的號碼不會發送到伺服器,所有計算均在瀏覽器的JavaScript中完成。不過如果只是想測試功能,建議使用示例按鈕提供的測試號碼,而非真實卡號。

這是IBM的Hans Peter Luhn於1954年發明的一種錯誤檢測演算法。從卡號最右側開始每隔一位乘以2,若所有數字之和為10的倍數,則判定格式有效,可檢測出大部分的輸入錯誤。

是根據卡號開頭的幾位數字(IIN:發卡行識別碼)與總位數的組合來判斷的。例如Visa以“4”開頭,長度為13、16或19位;Mastercard以“51〜55”等開頭,長度為16位;JCB以“3528〜3589”開頭,長度為16〜19位,均基於公開的規則。詳細對照表請參見工具下方的“支援的品牌與判定條件(IIN・位數)”部分。

不是。通過Luhn校驗只能說明該號碼在格式上“沒有矛盾”。即使是隨機編造、並不存在的號碼,只要調整最後一位數字,也能通過Luhn校驗。
工具君

閒話 ― 校驗位之父 Hans Peter Luhn

信用卡號末位那個不起眼的“校驗位”,其實出自IBM工程師Hans Peter Luhn於1954年發明的一套演算法。他因此項發明於1960年獲得專利,如今專利早已失效,這套演算法也就順理成章地成為了任何人都可以自由使用的公開演算法,如今幾乎所有主流卡組織都在沿用它。

有趣的是,Luhn演算法的原理其實很簡單:從卡號最右側開始,每隔一位將數字乘以2,若結果為兩位數則將其各位相加(例如8×2=16 → 1+6=7)。把所有數字相加之後,只要總和能被10整除,該號碼在格式上就會被判定為有效——如此樸素的規則,卻足以攔下絕大多數的輸入筆誤。

正因為原理簡單又通用,這一演算法不僅用於信用卡,還廣泛應用於IMEI號碼(手機識別碼)、加拿大社會保險號碼等各類識別號碼的輸入錯誤檢測。不過需要留意的是,Luhn演算法終究只是用於“檢測輸入錯誤”,並不能判斷該卡號是否真實存在,更不能判斷是否還有餘額。

卡號的前6〜8位則被稱為“IIN(發卡行識別碼)”,其中悄悄藏著這張卡屬於哪個國際卡組織、由哪家銀行發行的資訊。本工具的卡組織識別功能,正是基於這些公開的IIN號段規則實現的。