お仕事で使っている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+