LUHN算法,主要用来计算信用卡等证件号码的合法性。
1、从卡号最后一位数字开始,偶数位乘以2,如果乘以2的结果是两位数,将两个位上数字相加保存。
2、把所有数字相加,得到总和。
3、如果信用卡号码是合法的,总和可以被10整除。
英文描述:
1.Counting from the check digit, which is the rightmost, and moving left, double the value of every second digit.
2.Sum the digits of the products (e.g., 10: 1 + 0 = 1, 14: 1 + 4 = 5) together with the undoubled digits from the original number.
3.If the total modulo 10 is equal to 0 (if the total ends in zero) then the number is valid according to the Luhn formula; else it is not valid.
 
Luhn 算法或是Luhn 公式,也被称作“模10算法”。它是一种简单的校验公式,一般会被用于身份证号码,IMEI号码,美国供应商识别号码,或是加拿大的社会保险号码的验证。该算法是由IBM的科学家Hans Peter Luhn所创造,于1954年1月6日提出该专利的申请,并于1960年8月23日被授予,在美国的专利号为2950048。
该算法一直都被大家所公用,并且时至今日应用也很广泛。它被指定在ISO/IEC7812-1。它的目的不是成为一种加密安全的哈希函数;它的目的是防止意外出现的错误,而不是恶意攻击。很多信用卡和众多的政府身份识别号码都使用该算法从一系列的随机数字中提取有效的数字。
优点和缺点
Luhn 算法会检测到任何单码的错误以及几乎所有的相邻数字换位的错误。但是它不会检测两个数字序列09转90的错误(反之亦然)。它会检测到十分之七的相同双位数错误(不会检测到22和55的互换,33和66的互换,44和77的互换)。其他更复杂的检查数字算法,如费尔赫夫算法,可以检测出更多的转录错误。模N的Luhn算法是Luhn算法的一个扩展,支持非数字字符串。因为该算法采取了从右向左的方式,而且零位会影响计算的结果。只有当零位造成了数位的移动或是用零来填充一串数字的开头时才不会影响计算结果的生成。因此不论在将1234用零填充为0001234之前或是之后,使用Luhn算法得到的结果都是一样的。
该算法在美国专利上是为了给手持或是机械设备计算校验码。所以它必须尽可能的简单。

最新文章

  1. Fis3的前端工程化之路[三大特性篇之资源定位]
  2. <实训|第五天>通过搭建NFS,FTP实现共享文件附Vim脚本游戏
  3. OCJP(1Z0-851) 模拟题分析(二)over
  4. (1) 第一章 Java体系结构介绍
  5. SNF开发平台WinForm之一-开发-单表表格编辑管理页面-SNF快速开发平台3.3-Spring.Net.Framework
  6. Eclipse里面启用genymotion
  7. Spring对加载的bean之间循环依赖的处理
  8. NAT123 解决80端口被封的问题
  9. 山东省第五届ACM省赛
  10. js高手
  11. [转载]ecshop 实现订单导出功能 指定订单导出 EXCEL 数据文件
  12. 文件的哈希值不在指定的目录文件中。此文件可能已损坏或被篡(Windows10 /Windows8.1)
  13. 找不到方法: Int32 System.Environment.get_CurrentManagedThreadId() .
  14. centos7 安装 pyspider 出现的一系列问题及解决方案集合
  15. Doing Homework HDU - 1074 (状压dp)
  16. ODOO权限管理,在两个方面设置权限
  17. Codeforces821A Okabe and Future Gadget Laboratory 2017-06-28 14:55 80人阅读 评论(0) 收藏
  18. Java基础九--抽象类
  19. STL在数组算法的使用
  20. BZOJ 4002--有意义的字符串(矩阵乘法)

热门文章

  1. js面向对象(一)——封装
  2. JAVA学习5:用Maven创建第一个web项目(2)servlet演示
  3. 【C语言】-指针
  4. oracle中斜杠(/)的含义
  5. hihocoder #1529 : 不上升序列
  6. XAMl使用其他命名空间中的类型及加载和编译
  7. 1.http请求编程-->基础原理
  8. smarty assign 赋值
  9. java实现Redis分布式锁
  10. phpmyadmin登录报错crypt_random_string requires at least one symmetric cipher be loaded 解决方法