Javascript驗證信用卡號、信用卡類型(最全最新)

如果瀏覽不順暢請到 原文章出處:https://www.sky8g.com/technology/2690/

請注意可能會提示風險,這是csdn設置網站設置的問題,請放心訪問,謝謝。

 

本篇文章是由SKY8G網編輯,純屬原創文章禁止抄襲。更新時間是2019年6月2日。

下面我將爲大家介紹Javascript是如何驗證信用卡號、信用卡類型,講到這裏有的小夥伴還不知道什麼是信用卡的吧,信用卡就是我們可以tiqian提前透支的一種

卡這是和存蓄卡最大的區別。下面由我給大家介紹下信用的類型。

下面是通過百度百科的解釋,信用卡根據流通範圍的不同,可分爲國際卡地區卡

國際卡。國際卡是一種可以在發行國之外使用的信用卡,全球通用。境外五大集團(萬事達卡組織、維薩國際組織美國運通公司、JCB信用卡公司和大萊信用卡公司)分別發行的萬事達卡(Master Card)、維薩卡(VISA Card)、運通卡(American Express Card)、JCB卡(JCB Card)和大萊卡(Diners Club Card)多數屬於國際卡。

地區卡。地區卡是一種只能在發行國國內或一定區域內使用的信用卡。我國商業銀行所發行的各類信用卡大多數屬於地區卡。

我們要了解Luhn算法:

也稱爲「模10」Mod 10算法,是一種的效驗和算法,一般用於身份證識別碼,例如髮卡行識別碼、國際行動裝置辨別碼(IMEI),美國國家提供商標號碼,或是加拿大社會保險號碼。該算法由IBM科學家Hans Peter Luhn創建,專利於1954年1月6日申請,1960年8月23日頒發,美國專利號2950048[1]。

通過以上的介紹大家應該對信用卡有所瞭解了,接下面我們就利用js如何進行信用的號的驗證,和js如何判斷信用卡的類型的。

 

1

2

3

4

5

6

7

我們以數字「7992739871」爲例,計算其校驗位:

從校驗位開始,從右往左,偶數位乘2(例如,7*2=14),然後將兩位數字的個位與十位相加(例如,10:1+0=1,14:1+4=5);

把得到的數字加在一起(本例中得到67);

將數字的和取模10(本例中得到7),再用10去減(本例中得到3),得到校驗位。

原始數字 7 9 9 2 7 3 9 8 7 1 x

偶數位乘2 7 18 9 4 7 6 9 16 7 2 x

將數字相加 7 9 9 4 7 6 9 7 7 2 =67

通過以上的閱讀相信你已經掌握了Luhn的算法,接下來我將展示給大家如何驗證信用的JavaScript代碼

驗證信用的類型代碼如下: 

如果瀏覽不順暢請到 原文章出處:https://www.sky8g.com/technology/2690/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

    /**

     * 創建信用卡類型的Javascript對象

     * 0 - regexp for card number

     * 1 - regexp for cvn

     * 2 - 通過Luhn算法檢查信用卡號碼是否正確

     */

    creditCartTypes = {

        'SO': [

            new RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$'),

            new RegExp('^([0-9]{3}|[0-9]{4})?$'),

            true

        ],

        'SM': [

            new RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|' +

                '(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|' +

                '(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|' +

                '(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|' +

                '(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|' +

                '(^(4936)([0-9]{12}$|[0-9]{14,15}$))'), new RegExp('^([0-9]{3}|[0-9]{4})?$'),

            true

        ],

        'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],

        'MC': [

            new RegExp('^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$'),

            new RegExp('^[0-9]{3}$'),

            true

        ],

        'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],

        'DI': [new RegExp('^(6011(0|[2-4]|74|7[7-9]|8[6-9]|9)|6(4[4-9]|5))\\d*$'), new RegExp('^[0-9]{3}$'), true],

        'JCB': [new RegExp('^35(2[8-9]|[3-8])\\d*$'), new RegExp('^[0-9]{3}$'), true],

        'DN': [new RegExp('^(3(0[0-5]|095|6|[8-9]))\\d*$'), new RegExp('^[0-9]{3}$'), true],

        'UN': [

            new RegExp('^(622(1(2[6-9]|[3-9])|[3-8]|9([[0-1]|2[0-5]))|62[4-6]|628([2-8]))\\d*?$'),

            new RegExp('^[0-9]{3}$'),

            true

        ],

        'MI': [new RegExp('^(5(0|[6-9])|63|67(?!59|6770|6774))\\d*$'), new RegExp('^[0-9]{3}$'), true],

        'MD': [new RegExp('^6759(?!24|38|40|6[3-9]|70|76)|676770|676774\\d*$'), new RegExp('^[0-9]{3}$'), true]

    };

調用方法:

 

1

creditCartTypes['VI'][0].test('4111111111111111');

輸出:

 

1

true

true表示是信用卡。

使用mod10驗證信用卡號碼代碼:

如果瀏覽不順暢請到 原文章出處:https://www.sky8g.com/technology/2690/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

function validateCreditCard(s) {

        // remove non-numerics

        var v = '0123456789',

            w = '',

            i, j, k, m, c, a, x;

 

        for (i = 0; i < s.length; i++) {

            x = s.charAt(i);

 

            if (v.indexOf(x, 0) !== -1) {

                w += x;

            }

        }

        // validate number

        j = w.length / 2;

        k = Math.floor(j);

        m = Math.ceil(j) - k;

        c = 0;

 

        for (i = 0; i < k; i++) {

            a = w.charAt(i * 2 + m) * 2;

            c += a > 9 ? Math.floor(a / 10 + a % 10) : a;

        }

 

        for (i = 0; i < k + m; i++) {

            c += w.charAt(i * 2 + 1 - m) * 1;

        }

 

        return c % 10 === 0;

    }

調用:

 

1

2

validateCreditCard('4111111111111111');

validateCreditCard('432323908888');

輸出:

 

1

2

true

false

 

如果有不懂的地方請留言,SKY8G網站編輯者專注於研究IT源代碼研究與開發。希望你下次光臨,你的認可和留言是對我們最大的支持,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章