卢恩校验

实践练习C++17

简介

在全球验证机构,你接到一项重要任务。网购、安全登录等服务依赖信用卡号、账户号、交易码、物流编号等数字标识的准确性。Luhn 算法是一种简单校验和公式,用于发现数字输入错误。

一批标识已经送到桌上,需要逐个进行 Luhn 检查。未通过的会标为无效,以避免错误交易或验证失败。注意,校验通过只说明满足格式规则,并不能证明号码真实存在。

许多服务都依赖这项检查,请认真完成!

任务说明

根据 Luhn 公式判断号码是否有效。

输入以字符串提供。

验证号码

去掉空格后,长度不超过 1 的字符串无效。输入允许空格,检查前应删除;其他非数字字符都不允许。

示例

有效信用卡号

检查 4539 3195 0343 6467。

从右向左,从倒数第二位开始,把每隔一位的数字乘以 2。

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 无效。