与えられた数値がLuhnの公式に従って有効かどうかを判定します。
Luhnアルゴリズムは、クレジットカード番号やカナダの社会保険番号など、さまざまな識別番号を検証するために使われるシンプルなチェックサムの公式です。
ここでの課題は、与えられた文字列が有効かどうかを確認することです。
長さが1以下の文字列は有効ではありません。入力にはスペースを含めることができますが、検証の前に取り除く必要があります。それ以外の数字以外の文字は許可されません。
4539 3195 0343 6467
Luhnアルゴリズムの最初のステップは、右から数えて1つおきの数字を2倍にすることです。ここでは、次の桁を2倍にします。
4_3_ 3_9_ 0_4_ 6_6_
2倍した結果が9より大きくなった場合は、その積から9を引きます。2倍にした結果は次のとおりです。
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
右から数えて1つおきの数字を2倍にします。
7253 2262 5312 0539
桁を合計します。
7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57
57は10で割り切れないため、この数値は有効ではありません。
Luhnの8つのバージョンを見ていきます。とてもすっきりしたRubyの実装から始めて、命令型と関数型のアプローチをいくつか探り、最後はErikとJeremyが解読に苦労したSQLite版で締めくくります!