Luhn算法初介绍

1.1 Luhn算法介绍

它可以如下描述(为了方便解释,假设卡号为4388576018402626):
1)从左到右对每个数字翻倍。如果对某个数字翻倍后的结果是两位数,那么就将这两位加在一起得到一个一位数。
例:4388576018402626(从后面数,==书里写的方向是错的==。应该是从右往左数),见下表

从右数位置 原卡号字符 算式 结果 处理后
1 6 - - 6(偶数位,直接加)
2 2 2 × 2 4 4(奇数位,翻倍后加)
3 6 - - 6(偶数位,直接加)
4 2 1 × 2 2 2(奇数位,翻倍后加)
5 0 - - 0(偶数位,直接加)
6 4 4 × 2 8 2(奇数位,翻倍后加)
7 8 - - 8(偶数位,直接加)
8 1 1 × 2 2 2(奇数位,翻倍后加)
9 0 - - 0(偶数位,直接加)
10 6 6 × 2 12 1+2=3(奇数位,翻倍后加)
11 7 - - 7(偶数位,直接加)
12 5 1 × 2 10 1+0=1(奇数位,翻倍后加)
13 8 - - 8(偶数位,直接加)
14 8 8 × 2 16 1+6=7(奇数位,翻倍后加)
15 3 - - 3(偶数位,直接加)
16 4 4 × 2 8 8(奇数位,翻倍后加)

2)将表中的结果进行相加 4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37

3)将偶数位进行相加 6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38

4)将2步和3步加到一起 37 + 38 = 75

5)第4步的结果能被10整除,为合法,否则是非法

小技巧:Luhn算法简化解释

其实"翻倍后两位数相加" 可简化为 "减 9"(比如 12→1+2=3=12-9,16→1+6=7=16-9)

翻倍后若为两位数,直接减 9 等价于 "各位相加"(如 12-9=3,16-9=7),

*** 我们在代码中可直接用doubled - 9,无需判断位数。

相关推荐
大江东去浪淘尽千古风流人物5 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
Swift社区5 小时前
Gunicorn 与 Uvicorn 部署 Python 后端详解
开发语言·python·gunicorn
Coinsheep5 小时前
SSTI-flask靶场搭建及通关
python·flask·ssti
IT实战课堂小元酱5 小时前
大数据深度学习|计算机毕设项目|计算机毕设答辩|flask露天矿爆破效果分析系统开发及应用
人工智能·python·flask
码农阿豪5 小时前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask
wqq63108555 小时前
Python基于Vue的实验室管理系统 django flask pycharm
vue.js·python·django
Q_Q19632884755 小时前
python大学生爱心校园互助代购网站_nyvlx_django Flask vue pycharm项目
python·django·flask
码农阿豪5 小时前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
xcLeigh5 小时前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特5 小时前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构