给定一个数字,判断它是否符合 Luhn 公式,即是否有效。
Luhn 算法是一种简单的校验和公式,用于验证各种标识号码,比如信用卡号和加拿大社会保险号。
任务是检查给定的字符串是否有效。
长度不超过 1 的字符串无效。输入中允许有空格,但在检查前应当先把空格去掉。所有其他非数字字符都不允许出现。
4539 3195 0343 6467
Luhn 算法的第一步是从右往左,把每隔一位的数字翻倍。我们要翻倍的是
4_3_ 3_9_ 0_4_ 6_6_
如果翻倍后的结果大于 9,就从乘积中减去 9。翻倍后的结果如下:
8569 6195 0383 3437
然后把所有数字相加:
8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80
如果和能被 10 整除,这个数字就是有效的。这个数字是有效的!
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 整除,所以这个数字无效。
我们会探索 8 个不同版本的 Luhn,从一个非常简洁的 Ruby 实现开始,看看一些命令式和函数式的写法,最后是一个让 Erik 和 Jeremy 花了不少功夫才破译的 SQLite 版本!