正在翻譯一篇文 Regex: Credit Card Numbers

有時候走火入魔就是這樣,前篇還在寫我正在研究 Regular Expression 玩數字檢查,結果看到信用卡號碼檢查有很多人提出不同的方法,我找到一篇國外的文章,寫得很詳盡,就想給它翻譯怕自己忘了原理。

此篇原文 Regex: Credit Card Numbers 內容介紹了世界各地金融網路發行的卡片及編碼形成方式,並且提供了 RegEx 的方法,由於這涉及了非常多的銀行專業知識,很多專有名詞及用語很艱深,我目前翻譯得很辛苦,但若有急用的人,不妨參考以下我節錄的幾個比較常見的卡號驗證方式。

Visa 卡

基本的驗證卡號長度對不對,範例卡號 "4012888888881881"

^4\d{15}$

驗證含有空白或破折號分隔形成的卡號,範例卡號 "4012-8888-8888-1881"

^4\d{3}([\ \-]?)\d{4}\1\d{4}\1\d{4}$

Master 萬事達卡

基本的驗證卡號長度對不對,範例卡號 "5111005111051128"

^5[1-5]\d{14}$

驗證含有空白或破折號分隔形成的卡號

^5[1-5]\d{2}([\ \-]?)\d{4}\1\d{4}\1\d{4}$

American Express 美國運通卡

基本的驗證卡號長度對不對,範例卡號 "371449635398431"

^3[47]\d{13}$

驗證含有空白或破折號分隔形成的卡號,範例卡號 "3714-496353-98431"

^3[47]\d\d([\ \-]?)\d{6}\1\d{5}$

Discover

基本的驗證卡號長度對不對,範例卡號 "6011000990139424"

^6(?:011\d\d|5\d{4}|4[4-9]\d{3}|22(?:1(?:2[6-9]|[3-9]\d)|[2-8]\d\d|9(?:[01]\d|2[0-5])))\d{10}$

驗證含有空白或破折號分隔形成的卡號

^6(?:011|22(?:1(?=[\ \-]?(?:2[6-9]|[3-9]))|[2-8]|9(?=[\ \-]?(?:[01]|2[0-5])))|4[4-9]\d|5\d\d)([\ \-]?)\d{4}\1\d{4}\1\d{4}$

 

Diner’s Club International (DCI) 已經被 Discover 吃了,所以 DCI 卡可能在其他文章有提到,但其實現在都被歸為 Discover。

JCB

基本的驗證卡號長度對不對,範例卡號 "3566002020360505"

^35(?:2[89]|[3-8]\d)\d{12}$

驗證含有空白或破折號分隔形成的卡號

^35(?:2[89]|[3-8]\d)([\ \-]?)\d{4}\1\d{4}\1\d{4}$

UnionPay (中國銀聯)

基本的驗證卡號長度對不對,範例卡號 "6212341111111111111"

^62[0-5]\d{13,16}$

Maestro

基本的驗證卡號長度對不對,範例卡號 "5019717010103742"

^(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}$

愛爾蘭的Laser卡也屬於 Maestro

參考連結

以上所提供的 RegEx 語法其實大概只有原文所提的一半而已,若需要更完整的可以看以下連結

發佈留言