Luhn

Luhn

中等

简介

在全球验证局,你刚刚接到了一项关键任务。整座城市里,从网上购物到安全登录,无数操作都依赖各种数字标识符的准确性,比如信用卡号、银行账号、交易代码和追踪编号。Luhn 算法是一种简单的校验和公式,用来确保这些号码有效且没有错误。

一批标识符刚刚送到了你的桌上。它们必须全部通过 Luhn 测试,才能确认是合法的。只要有一个没通过,就会被标记为无效,从而防止错误和欺诈,比如错误的交易或未经授权的访问。

你能确保这件事做得对吗?许多服务的可靠性都取决于你。

说明

根据 Luhn 公式,判断一个信用卡号是否有效。

这个号码会以字符串的形式提供。

验证数字

长度不超过 1 的字符串无效。输入中允许有空格,但在检查前应当先把空格去掉。所有其他非数字字符都不允许出现。

示例 1:有效的信用卡号

4539 3195 0343 6467

Luhn 算法的第一步是从右往左,把每隔一位的数字翻倍。我们要翻倍的是

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

如果翻倍后的结果大于 9,就从乘积中减去 9。翻倍后的结果如下:

8569 6195 0383 3437

然后把所有数字相加:

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

如果和能被 10 整除,这个数字就是有效的。这个数字是有效的!

示例 2:无效的信用卡号

8273 1232 7352 0569

从右往左,把每隔一位的数字翻倍

7253 2262 5312 0539

把各位数字相加

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 不能被 10 整除,所以这个数字无效。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Erlang Exercism

准备好开始 Luhn 了吗?

注册 Exercism,借助 85 个练习 和真人导师指导,学习并掌握 Erlang,全部免费。

深入探索 Luhn!

我们会探索 8 个不同版本的 Luhn,从一个非常简洁的 Ruby 实现开始,看看一些命令式和函数式的写法,最后是一个让 Erik 和 Jeremy 花了不少功夫才破译的 SQLite 版本!