银行卡合法性校验

Luhn检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn检验数字算法属于大众,任何人都可以使用它。
算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。

使用如下代码:

//剔除卡号里的非法字符
-(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.判断银行卡号 检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种...
    崔又淇阅读 3,938评论 0 0
  • 前些天在做一个银行卡的校验,在网上搜了好久也没有找到能用的正则表达式,就自己写了了根据银行卡的bin值判断该卡所对...
    Orz013阅读 8,175评论 6 10
  • "我的天哪,野猪会伤人的,太可怕了吧,吓死我了!"张倩一边装小女生,一边手不停的打游戏!陈元要的就是这种满足感,历...
    雨射零丁阅读 1,690评论 0 0
  • 李金初's
    minnameng阅读 1,079评论 0 0
  • 转眼间孩子已经5岁了,从曾经襁褓中那个嗷嗷待噗的小婴儿迅速的成长为妈妈的小棉袄。这五年里我们俩一起经历风雨,一同快...
    爱与不爱在一念之间阅读 2,905评论 1 2