Luhn

Luhn

中級

はじめに

Global Verification Authorityでは、ちょうど今、重要な任務を任されたばかりです。 街のいたるところで、オンラインでの買い物から安全なログインまで、数えきれないほどの処理が、クレジットカード番号や銀行口座番号、取引コード、追跡IDといった数値の識別子の正確さに支えられています。 Luhnアルゴリズムは、こうした番号が正しく、誤りがないことを確認するためのシンプルなチェックサムの計算式です。

識別子の束が、ちょうど机の上に届きました。 すべてが正当であることを確認するには、Luhnテストに合格しなければなりません。 もし一つでも不合格になれば、無効としてマークされ、不正な取引や不正アクセスといったエラーや不正行為を防ぐことができます。

これを正しくやり遂げられますか? 多くのサービスの信頼性が、この仕事にかかっています。

説明

クレジットカード番号がLuhnの公式に従って有効かどうかを判定します。

番号は文字列として渡されます。

数値の検証

長さが1以下の文字列は有効ではありません。入力にはスペースを含めることができますが、検証の前に取り除く必要があります。それ以外の数字以外の文字は許可されません。

例1:有効なクレジットカード番号

4539 3195 0343 6467

Luhnアルゴリズムの最初のステップは、右から数えて1つおきの数字を2倍にすることです。ここでは、次の桁を2倍にします。

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

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で割り切れる場合、その数値は有効です。この数値は有効です!

例2:無効なクレジットカード番号

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で割り切れないため、この数値は有効ではありません。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Erlang Exercism

Luhnを始める準備はできましたか?

Exercismに登録すれば、85個の演習、そして本物の人間によるメンタリングとともに、Erlangを学んでマスターできます。すべて無料です。

Luhnを深く掘り下げよう!

Luhnの8つのバージョンを見ていきます。とてもすっきりしたRubyの実装から始めて、命令型と関数型のアプローチをいくつか探り、最後はErikとJeremyが解読に苦労したSQLite版で締めくくります!