カード番号の最後の一桁は「チェックデジット」と呼ばれ、カード番号の有効性を判定するのに利用されます。 今回はチェックデジットの判定を行うJavaScriptを実行してみますφ(..)
チェックデジットとは?
数値の入力誤りを検出するために、末尾に付与される数値。
チェックディジット、チェックサム、検査数字、検査文字などとも。
英語だとCheck Digit、略称はCD、C/D。
クレジットカード以外にも、バーコードや銀行の口座番号、マイナンバー等、色々な番号で使用されています。
[参考]IT用語辞典
www.weblio.jp
[参考]wikipedia
チェックディジット - Wikipedia
Luhnアルゴリズムとは?
チェックデジットを判定するアルゴリズムには「Dammアルゴリズム」「ヴァーヘフアルゴリズム」「Luhnアルゴリズム」等があり、
クレジットカードでは「Luhnアルゴリズム」を使用しています。
[参考]wikipedia
Luhnアルゴリズム - Wikipedia
色々な言語のサンプルコードが公開されています。
チェックデジット判定
カード番号を入力し「判定」ボタンを押すとダイアログに結果が表示されます。
適当に入れると大体エラーになりますw
例えば「1111222233334444」とか入れるとOKが出ます。
コード
HTML
onclickでShowCheckResultを実行。
<form name = fr_card_info> <input name="card_num" type="text" value="" placeholder="カード番号 (半角数字)" size = "24" maxlength = "16" /> <br/> <input type="button" value="判定" onclick="ShowCheckResult()"> </form>
JavaScript
一応数値チェック(NumCheck)も入れてます。
数値チェックOKの場合、チェックデジット判定(luhn_checksum)でチェックデジットを判定します。
<script language="javascript"> <!-- //チェック結果表示 function ShowCheckResult() { in_card_num = document.fr_card_info.card_num.value; //カード番号チェック if(in_card_num == "" || NumCheck(in_card_num) == false){ alert("カード番号には半角数値を入力して下さい"); return; } //チェックデジット判定 if(luhn_checksum(in_card_num) == false){ alert("チェックNG(><;)"); return; } //チェックOK alert("チェックOK( '-')b"); } //数値チェック function NumCheck(val) { if (val.match(/[^z0-9]+/)) { return false; } } //チェックデジット判定 function luhn_checksum(card_number) { var a, s, i, x; a = card_number.split("").reverse(); s = 0; for (i = 0; i < a.length; i++) { x = a[i] * (1 + i % 2); s += x > 9 ? x - 9 : x; } return s % 10 == 0; } //--> </script>
コード参考
以下、参考にさせて頂きましたm(_ _)m
[参考1]クレジットカード番号をチェックする
luhn_checksumを使用させて頂きました。
[参考3][メモ] 各種チェックデジットの計算方法
NumCheckを使用させて頂きました。
エクセルマクロ
私の大好きなエクセルマクロ(VBA)のサンプルもありました。
まあ使う機会があるかどうかは極めて微妙ですが…(-_- )
[参考]Luhn Algorithm Validation in VBScript (ASP)
上記のコードをそのまま実行するとコンパイルエラーになってしまうので、参照設定にRegExpオブジェクトを追加する必要があります。
[参考]VBAで正規表現を使う - RegExpオブジェクトの利用
codezine.jp
チェックデジット以外のカード番号の意味
せっかくなのでおまけで少し触れておきたいと思います。
簡単な解説をまとめました。
[参考]クレジットカードプロ
https://www.card-x.net/contents/creditcard-number.htmlwww.card-x.net
[参考]GIZMODO
www.gizmodo.jp
[参考]wikipedia
クレジットカードの番号 - Wikipedia
おわり
MASTERカードの先頭2導入とか、先頭1のブランド(UATP)とか、意外と新たな発見がありました。
ただの数字の羅列に見えるものにも、実は色々な意味が込められているんですね(' ' )