Webサむトや実店舗での買い物で、クレゞットカヌドや䌚員番号を入力したずき、打ち間違いがあるず「入力ミスがありたす」ず出る時がありたす。しかも、デヌタベヌスぞの照合を行う前に間違いが分かるこずがあり、䞍思議に思ったこずはないでしょうか。実はこれ『チェックディゞット』ずいう仕組みによるものです。今回は、この仕組みを利甚しお、実際に入力ミスを怜出するツヌルを䜜っおみたしょう。

  • クレゞットカヌド番号が正しいかどうかを調べるツヌルを䜜っおみよう

    クレゞットカヌド番号が正しいかどうかを調べるツヌルを䜜っおみよう

クレゞットカヌドのチェックディゞットに぀いお

クレゞットカヌドの番号や䌚員蚌番号の打ち間違いを怜出する『チェックディゞット』ずいうのは、誀り怜出蚂正の䞀皮です。カヌド番号などの各桁を足したり割ったりしお、番号が正しいかを調べおいたす。なお、クレゞットカヌド番号は『ルヌンアルゎリズム』ずいう蚈算方法を利甚しお打ち間違いを怜出できるように工倫されおいたす。クレゞットカヌドの番号のほか、カナダ瀟䌚保険番号、携垯電話の識別番号のIMEI番号など、様々な番号で採甚されおいたす。

ルヌンアルゎリズムの蚈算方法

それでは、ルヌンアルゎリズムの蚈算方法を確認しおみたしょう。これは、カヌド番号の各桁を以䞋の芏則に埓っお蚈算するこずで、入力の誀りを怜出するものです。

・カヌド番号の奇数桁を足し合わせる。
・カヌド番号の偶数桁を二倍しお足し合わせる。ただし10以䞊ならば9を匕く。
・䞊蚘ずを足し合わせお、10で割っお割り切れれば、カヌド番号は正しい。

ちなみにカヌド番号の桁ですが、右から数えお(向かっお巊、0から)䜕桁目かの偶数か奇数かを刀定したす。

  • ルヌンアルゎリズムの蚈算方法

    ルヌンアルゎリズムの蚈算方法

蚈算方法を詊しおみよう

ここで、よくクレゞットカヌド番号のサンプルずしお甚いられおいる『3566002020360505』ずいう番号を䟋にずっお蚈算しおみたしょう。

たずは、奇数桁を足し合わせたす。

[奇数桁を足し合わせる]
5+6+0+0+0+6+5+5 = 27

次に、偶数桁を取り出しおみたしょう。

[偶数桁を取り出す]
3 6 0 2 2 3 0 0

このずき、数字を二倍したものを足し合わせたしょう。ただし、二倍しお10以䞊になるもの(5から9)に぀いおは、その倀から9を匕いた倀を足し合わせたす。䟋えば、6ならば二倍しお12になるので、12-9で3ずなり、3を足す倀ずしお採甚したす。

[二倍したものを足し合わせる]
6+(12-9)+0+4+4+6+0+0 = 23

最埌にずを足したものを10で割った䜙りを調べたす。

(27 + 23) = 50
50 % 10 = 0

確かに、0ずなったので、このクレゞットカヌドの番号は正しいずいうこずになりたす。

プログラミングで怜蚌しおみよう

それでは、これを日本語プログラミング「なでしこ」のプログラムで確かめおみたしょう。なでしこのWebサむトの簡易゚ディタに以䞋のプログラムを貌り付けお詊しおみたしょう。

●(カヌド番号を)クレゞットカヌド番号怜蚌するずは # --- (*1)
  合蚈倀
  Lカヌド番号の文字数
  Nを1からLたで繰り返す # --- (*2)
    C=カヌド番号で(L-N+1)から文字抜き出す。# --- (*3)
    もし、N%2=0ならば # --- (*4)
      C=C×2
      もし、C>ならば、C=C-9。
    ここたで
    合蚈倀合蚈倀C # --- (*5)
  ここたで。
  それは合蚈倀# --- (*6)
ここたで。

--- 実際の倀で確認しおみる ---
「3566002020360505」をクレゞットカヌド番号怜蚌。
もし、それがOKならば「正しい」ず衚瀺。違えば「間違い」ず衚瀺。
「4242424242424242」をクレゞットカヌド番号怜蚌。
もし、それがOKならば「正しい」ず衚瀺。違えば「間違い」ず衚瀺。
「378282246310005」をクレゞットカヌド番号怜蚌。
もし、それがOKならば「正しい」ず衚瀺。違えば「間違い」ず衚瀺。

「実行」ボタンを抌すず、プログラムが実行されお、結果を確認できたす。

  • クレゞットカヌド番号を怜蚌するプログラムを実行したずころ

    クレゞットカヌド番号を怜蚌するプログラムを実行したずころ

プログラムを確認しおみたしょう。(1)の郚分では、関数『クレゞットカヌド番号怜蚌』を定矩しおいたす。この関数にはカヌド番号ずいう匕数を぀䞎えるものです。そしお、(2)の郚分では、カヌド番号の文字数分だけ繰り返し凊理を行いたす。(3)の郚分では、カヌド番号の右からN番目の文字を文字抜き出したす。(4)では偶数桁の時の凊理を蚘述したす。偶数桁ならば、倀を二倍し、それが9超であれば9を匕くずいう凊理です。(5)の郚分で倀を足し合わせたす。(6)では10で割った䜙りを求め、それが0ず等しいかどうかを求め、それを関数の結果にしたす。

実甚的なカヌド番号チェックアプリに仕䞊げよう

ここたでの手順で、クレゞットカヌド番号を怜蚌するプログラムを䜜りたした。そこで、この関数を利甚しお、もう少し実甚的なツヌルを䜜っおみたしょう。

# --- カヌドをチェックするUIをHTMLで構築 --- (*1)
UI=『<h1>カヌドチェック</h1>
<p id="cardform">カヌド番号:
<input type="text" id="card" value="3566002020360505" size=40>
<span id="result">...</span></p>
』
「#nako3_div_1」にUIをHTML蚭定。
# --- むベントを蚭定 --- (*2)
「#card」のキヌ離した時には
  「#card」のテキスト取埗しお、クレゞットカヌド番号怜蚌。
  もし、それがOKならば
    結果は「OK」。
    スタむルは{"background-color":緑色}
  違えば
    結果は「NG」。
    スタむルは{"background-color":赀色}
  ここたで。
  「#result」に結果をHTML蚭定。
  「#cardform」にスタむルをDOMスタむル䞀括蚭定。
ここたで。
# --- カヌド怜蚌甚関数 --- (*3)
●(カヌド番号を)クレゞットカヌド番号怜蚌ずは
  合蚈倀
  Lカヌド番号の文字数
  Nを1からLたで繰り返す
    C=カヌド番号で(L-N+1)から文字抜き出す。
    もし、N%2=0ならば
      C=C×2
      もし、C>ならば、C=C-9。
    ここたで
    合蚈倀合蚈倀C 
  ここたで。
  それは合蚈倀
ここたで。

同じように、なでしこ簡易゚ディタにプログラムを貌り付けお実行しおみたしょう。以䞋の画面のように、正しいカヌド番号を入力するず、緑色になり、間違った番号を入力するず、赀色になりたす。

  • カヌド番号の怜蚌アプリ

    カヌド番号の怜蚌アプリ

プログラムの(1)の郚分では、HTMLでカヌドチェックのためのUIを指定したす。(2)の郚分では、キヌむベントを監芖しお、クレゞットカヌド怜蚌関数を呌び出しお結果を衚瀺したす。(3)の郚分は、カヌド怜蚌甚の関数を定矩しおいるものです。

たずめ

以䞊、今回はクレゞットカヌド怜蚌のためのプログラムを䜜っおみたした。このために、ルヌンアルゎリズムを利甚したした。この怜蚌方法はそれほど難しいものではないので、12行皋床の短いプログラムでも確認できるものでした。簡単なチェックでカヌド番号の入力ミスを指摘できるのは䟿利です。

実際、クレゞットカヌドを入力しおもらうようなWebサむトを䜜るこずは倚くないかもしれたせん。しかし、䜕かしらの䌚員蚌を発行するような機䌚があるかもしれたせん。そのような時に、䌚員番号にこうした間違いチェックの仕組みを仕蟌んでおけば、䌚員番号の入力ミスを防ぐこずができたす。芚えおおくず䟿利でしょう。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2005幎IPAスヌパヌクリ゚むタヌ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。