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

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

3135788

奇数位                            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整除,认定校验通过。

 -(BOOL) checkCardNumber:(NSString *) cardNumber{ 

       ;
       int len = [cardNumber length];
       ; 

       while (i < len) {
           NSString *tmpString = [cardNo substringWithRange:NSMakeRange(len -  - i, )];
           int tmpVal = [tmpString intValue];
            != ) {
                tmpVal *= ;
               ) {
                    tmpVal -= ;
       }
           }
           sum += tmpVal;
           i++;
       } 

       ) == )
           return YES;
       else
           return NO;
 }

Object-C 银行卡,信用卡校验规则(Luhn算法)的更多相关文章

  1. 银行卡号码校验算法(Luhn算法,又叫模10算法)

    有时候在网上办理一些业务时有些需要填写银行卡号码,当胡乱填写时会立即报错,但是并没有发现向后端发送请求,那么这个效果是怎么实现的呢. 对于银行卡号有一个校验算法,叫做Luhn算法. 一.银行卡号码的校 ...

  2. PHP中使用Luhn算法校验信用卡及借记卡卡号

    Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码. 我们以数字“7992739871”为例,计算其校验位: 从校验位开始,从右往左,偶数位乘 ...

  3. 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验

    开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS ...

  4. [技术栈]C#利用Luhn算法(模10算法)对IMEI校验

    1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...

  5. PHP LUHN算法验证银行卡

    <?php /* 16-19 位卡号校验位采用 Luhn 校验方法计算: 第一步:把信用卡号倒序(61789372994) 第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1.(eg:s1 ...

  6. 使用Luhn算法实现信用卡号验证

    问题描述: 2:信用卡号的验证 [信用卡号的验证] 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么 担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过 Luhn 算法 ...

  7. 银行卡luhm校验算法

    /** * 15位银行卡luhm校验算法 * 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. * 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...

  8. js验证银行卡号 luhn校验规则

    <script type="text/javascript"> //luhn校验规则:16位银行卡号(19位通用): // 1.将未带校验位的 15(或18)位卡号从右 ...

  9. JavaScript实现LUHN算法验证银行卡号有效性

    一般验证银行卡有效性用到一种叫做LUHN的算法,简介请参考这篇博客:基于Luhn算法的银行卡卡号的格式校验 注意: 1.LUHN算法只是能校验卡号是否有效,并不能校验卡号和用户名是否一致. 2.如果有 ...

随机推荐

  1. [JSOI2019]节日庆典(Z-algorithm)

    要想让一个位置作为最小循环,其必须是最小后缀,然后一个字符串的最小后缀不超过O(logn)个,于是维护备选集合即可. 然而要在O(n)复杂度求解,需要求出原串后缀与原串的LCP长度,需要用Z-algo ...

  2. 上传excel文件,读取内容,增加事务写入数据库

    package com.inspur.icpmg.itss.asset.dao.impl; import com.inspur.icpmg.util.DBHelper; import org.apac ...

  3. Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决

    eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“无效字符”上的语法错误,删除此 ...

  4. 编译原理_P1002

    . 词法分析 1.1 词法记号及属性 词法记号.模式.词法单元 记号名 词法单元列举    模式的非形式描述 if if 字符i,f for for     字符f,o,r relation < ...

  5. Maven配置阿里云问题

    现在我们经常会与Maven打交道,无论是工作还是自己的练笔,因为它真的是太强大了.它可以帮助我们管理版本,jar包等等. 但是由于国内的环境问题,我们需要有一个仓库,有些公司会自己搭建私服,那对个人来 ...

  6. 二十七、rsync同步工具

    1.什么是rsync? Rsync是一款开源的.快速的,多功能的,可实现全量及增量的本地或者远程数据同步备份的优秀工具.windows和linux都可以. 官网:http:www.samba.org/ ...

  7. 56)PHP,模型类的设计思想

    一张表对应一个模型类-----Mode

  8. 关联规则之FpGrowth算法

    Aprori算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现Apriori算法是一个候选消除算法,每一次消除都需要扫描一次所有数据记录,造成整个算法在面临大数据集时显得无能为 ...

  9. [LC] 231. Power of Two

    Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: ...

  10. Ubuntu12.10下安装Python3

    设置Python3.2为默认版本 ubuntu12.10下默认安装了Python2.7和Python3.2.3,并且设置了Python2.7为默认的版本,因此如果讨厌麻烦的话,可以直接将Python3 ...