zoukankan      html  css  js  c++  java
  • Object-C 银行卡,信用卡校验规则(Luhn算法)

    最近的项目中涉及到绑定用户的银行卡,借记卡。经过查找银行卡的校验规是采用 Luhn算法进行验证。

    Luhn算法,也被称作“模10算法”。它是一种简单的校验公式,一般会被用于身份证号码,IMEI号码,美国供应商识别号码,或是加拿大的社会保险号码的验证,主要用来计算信用卡等证件号码的合法性。
    1. 从卡号最后一位数字开始,逆向将奇数位(135等等)相加。
    2. 从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
    3. 将奇数位总和加上偶数位总和,结果应该可以被10整除。

    例如,卡号是:5432123456788881

    则奇数、偶数位(逆向奇数位为红色字体,偶数位为默认字体)分布:5432123456788881

    奇数位                            4 2 2 4 6 8 8 1   求和=35

    偶数位乘以2(若乘积大于9就要减去9)的结果:1 6 2 6 1 5 7 7,求和=35

    最后35+35=70可以被10整除,认定校验通过。

     1 -(BOOL) checkCardNumber:(NSString *) cardNumber{ 
     2      
     3       int sum = 0; 
     4       int len = [cardNumber length]; 
     5       int i = 0; 
     6      
     7       while (i < len) { 
     8           NSString *tmpString = [cardNo substringWithRange:NSMakeRange(len - 1 - i, 1)]; 
     9           int tmpVal = [tmpString intValue]; 
    10           if (i % 2 != 0) { 
    11                tmpVal *= 2; 
    12               if(tmpVal>9) { 
    13                    tmpVal -= 9;
    14       } 
    15           } 
    16           sum += tmpVal; 
    17           i++; 
    18       } 
    19      
    20       if((sum % 10) == 0) 
    21           return YES; 
    22       else 
    23           return NO;
    24 }
  • 相关阅读:
    最大连续子数组问题之一维数组
    敏捷开发读后感
    第一次作业总结
    OS X(10.10) python3.4 matplotlib的安装
    XCODE 6.1.1 配置GLFW
    python装饰器(decorator)
    Android实现Service永久驻留
    软件项目管理第2次作业:豆瓣测评
    软件项目管理第1次作业:四则运算生成器
    软件项目管理第0次作业:如果一定要改变世界的话,为什么不用最酷的方式呢
  • 原文地址:https://www.cnblogs.com/ChenHuChang/p/5577341.html
Copyright © 2011-2022 走看看