在 Global Verification Authority,你刚被委以一项至关重要的任务。整座城市里,从在线购物到安全登录,无数业务都依赖数字标识符的准确性,比如信用卡号、银行账号、交易代码和追踪编号。Luhn 算法是一种简单的校验和公式,用来帮助找出输错的数字。
一批标识符刚刚送到你的桌上。它们全都要通过 Luhn 检验,才能确认是合法的。只要有通不过的,就会被标记为无效,从而避免交易出错或账户验证失败这类失误。
你能确保这件事万无一失吗?许多服务的正常运转都取决于你。
判断一个数字是否符合 Luhn 公式。
这个数字会以字符串的形式提供。
长度不超过 1 的字符串无效。 输入中允许出现空格,但在检查之前应当先把它们去掉。 其他任何非数字字符都不允许出现。
待检查的数字是4539 3195 0343 6467。
Luhn 算法的第一步,是从数字的末尾开始,从右数第二位数字起向左移动,每隔一位就把该位数字翻倍。
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
如果某位数字翻倍后的结果大于 9,就把这个结果减去 9。 我们得到:
8569 6195 0383 3437
最后,把所有数字相加。 如果和能被 10 整除,原来的数字就是有效的。
8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80
80 能被 10 整除,所以数字4539 3195 0343 6467是有效的!
待检查的数字是066 123 478。
我们从数字的末尾开始,从右数第二位数字起向左移动,每隔一位就把该位数字翻倍。
066 123 478
↑ ↑ ↑ ↑ (double these)
如果某位数字翻倍后的结果大于 9,就把这个结果减去 9。 我们得到:
036 226 458
把各位数字相加:
0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36
36 不能被 10 整除,所以数字066 123 478无效!