当前位置: 首页 > news >正文

银行卡合法性校验

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

相关文章:

  • hostapd作为radius服务器
  • 中小企业的桌面虚拟化方案VDI-in-a-Box
  • 揭开RecyclerView的神秘面纱(二):处理RecyclerView的点击事件
  • 2012企业网站建设回归“简洁、实用”原则
  • urllib库的常见用法
  • Hyper-V and “Sandy Bridge” processors from Intel
  • iOS 关于viewController自定义的转场动画
  • Python:使用matplotlib绘制图表
  • html~display的使用
  • linux shell单引号、双引号及无引号区别(考试题答案系列)
  • Apache Oozie Installation
  • 使用Windows兼容包简化向.NET Core的迁移
  • JavaSE应该了解的类库
  • iOS开发 基于原生JS与OC方法互相调用并传值(附HTML代码)
  • 在Vmware中安装archlinux(2008.3core)的流程与心得
  • [PHP内核探索]PHP中的哈希表
  • 【node学习】协程
  • 2017年终总结、随想
  • Go 语言编译器的 //go: 详解
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java比较器对数组,集合排序
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PAT A1092
  • Spring Boot MyBatis配置多种数据库
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Web标准制定过程
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里云应用高可用服务公测发布
  • 简单数学运算程序(不定期更新)
  • 入手阿里云新服务器的部署NODE
  • 事件委托的小应用
  • 鱼骨图 - 如何绘制?
  • 责任链模式的两种实现
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 白色的风信子
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • Prometheus VS InfluxDB
  • 关于Android全面屏虚拟导航栏的适配总结
  • 数据可视化之下发图实践
  • ​渐进式Web应用PWA的未来
  • #{}和${}的区别是什么 -- java面试
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net 路由处理厉害了
  • @Autowired自动装配
  • @JSONField或@JsonProperty注解使用
  • [ajaxupload] - 上传文件同时附件参数值