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

お仕事で使っている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))
      )
  );
}
?>

とすればいい。

プライバシーポリシー お問い合わせ