银行卡合法性校验

Luhn检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn检验数字算法属于大众,任何人都可以使用它。

算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。

使用如下代码:

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

40

41

42

43

44

//剔除卡号里的非法字符

-(NSString *)getDigitsOnly:(NSString*)s

{

    NSString *digitsOnly = @””;

    char c;

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

    {

        c = [s characterAtIndex:i];

        if (isdigit(c))

        {

            digitsOnly =[digitsOnly stringByAppendingFormat:@”%c”,c];

        }

    }

    return digitsOnly;

}

//检查银行卡是否合法

//Luhn算法

-(BOOL)isValidCardNumber:(NSString *)cardNumber

{

    NSString *digitsOnly = [self getDigitsOnly:cardNumber];

    int sum = 0;

    int digit = 0;

    int addend = 0;

    BOOL timesTwo = false;

    for (int i = digitsOnly.length – 1; i >= 0; i–)

    {

        digit = [digitsOnly characterAtIndex:i] – ‘0’;

        if (timesTwo)

        {

            addend = digit * 2;

            if (addend > 9) {

                addend -= 9;

            }

        }

        else {

            addend = digit;

        }

        sum += addend;

        timesTwo = !timesTwo;

    }

    int modulus = sum % 10;

    return modulus == 0;

}

再一次感谢您花费时间阅读这篇文章!
微博: @Danny_吕昌辉
博客: SuperDanny

    原文作者:银行家问题
    原文地址: https://blog.csdn.net/lvchaman/article/details/51322961
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞