Hatena::ブログ(Diary)

前向きに行こうか - craysの日記 このページをアンテナに追加 RSSフィード Twitter

2008年 11月 18日

クレジットカード番号のチェックに有効なアルゴリズム

お仕事で使っているCakePHPに面白いチェックがあった。

クレジットカード番号は、乱数の羅列なのではなく、ルーン・アルゴリズムLuhn algorithm - Wikipedia)という方法によって算出された数値らしい。

これをチェックに使う事ができるので組み込んでみた。


このルーン・アルゴリズムは数値を一桁飛ばしで2倍にし、全ての桁を足していくと10で割り切れるかというもの。

ちょっと難しいので、図で説明。


例えば、「49927398716」というカード番号だった場合、一桁飛ばしで二倍にする。

  4  9  9  2  7  3  9  8  7  1  6
  ↓*2  ↓ *2 ↓ *2 ↓ *2 ↓ *2 ↓
  4 18  9  4  7  6  9 16  7  2  6

算出した値を桁毎に足していき、10で割る。

  4 18  9  4  7  6  9 16  7  2  6
  ↓
  4189476916726
  ↓
  4+1+8+9+4+7+6+9+1+6+7+2+6
  ↓
  70
  ↓
  70/10

この結果が割り切れれば、ルーン・アルゴリズムで正常な値となるわけ。


そして、CakePHPでこれを実現するには、Modelに

<?php
class CardPayment extends AppModel{
  
  var $validate = array(
      'card_no' => array(
          'luhn'  => array('rule' => array('cc', 'all', true, null))
      )
  );
}
?>

とすればいい。

miucrecamiucreca 2009/05/16 13:58 クレジットカード番号に規則性があったとは。
新しい発見ですね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証