信用卡號驗證器|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, 65 | 16 |
| JCB | 3528–3589 | 16 |
| Diners Club | 300–305, 36, 38 | 14 |
| UnionPay | 62 | 16–19 |
使用提示
- 請勿輸入真實卡號,可點選示例按鈕使用公開的測試號碼(如Visa: 4111 1111 1111 1111)來體驗功能。
- 即使號碼中包含空格或連字元,也會自動去除後再判斷,可直接貼上複製來的號碼。
- 本工具僅通過Luhn演算法進行格式校驗,實際的信用核實、餘額查詢請使用支付服務商提供的API。
- 在開發表單校驗邏輯時,可用本工具分別生成有效與無效的號碼,方便測試正常和異常兩種情況。
常見問題
不能。本工具只進行Luhn演算法的格式校驗,無法判斷該卡是否真實存在、是否已被停用,或餘額是否充足。真正的信用核實需要通過支付服務商的認證系統完成。
輸入的號碼不會發送到伺服器,所有計算均在瀏覽器的JavaScript中完成。不過如果只是想測試功能,建議使用示例按鈕提供的測試號碼,而非真實卡號。
這是IBM的Hans Peter Luhn於1954年發明的一種錯誤檢測演算法。從卡號最右側開始每隔一位乘以2,若所有數字之和為10的倍數,則判定格式有效,可檢測出大部分的輸入錯誤。
是根據卡號開頭的幾位數字(IIN:發卡行識別碼)與總位數的組合來判斷的。例如Visa以“4”開頭,長度為13、16或19位;Mastercard以“51〜55”等開頭,長度為16位;JCB以“3528〜3589”開頭,長度為16位,均基於公開的規則。詳細對照表請參見工具下方的“支援的品牌與判定條件(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號段規則實現的。