PHP入門

クレジットカード番号の認証

クレジットカード番号の仕組みから、番号が正しいかどうか判断

こんな認証フォームは使う機会が無いと思いますが、何となく作ってみました f(^_^;)

クレジットカード番号の16桁は、無意味に付加された番号ではなく、いろいろな意味があります。
1桁目はカード発行元の業種で、1~6桁目が発行元で、7桁目以降(最後の1桁を除く)は口座番号となっています。

1桁目の業種 1~6桁目の発行元(一例)
0 予備
1, 2 航空
3 旅行・娯楽 34****
37****
376211
Amex
Amex
Krisflyer Amex
4, 5 銀行・金融 4*****
51****
529962
55****
Visa
Mastercard
Much Music Mastercard
Mastercard
6 銀行・商品輸送 6011**
644***
65****
Discover
Discover
Discover
7 石油
8 通信
9

PHPサンプル

クレジットカード番号 ---  半角数字16桁を入力してください。

PHPサンプルコード

<?
$no1 = $_POST['no1'];
$no2 = $_POST['no2'];
$no3 = $_POST['no3'];
$no4 = $_POST['no4'];
$no = $no1 . $no2 . $no3 . $no4; //16桁に組み合わせる
if (preg_match('/^[\d]{16}+$/', $no)) { //半角数字16桁のチェック
    for ($i = 0; $i < 16; $i = $i + 2) { //奇数桁を加算
        $odd = $no{$i} * 2; //奇数桁を2倍で計算
        if (strlen($odd) == 2) { //2倍にしたときに2桁になった場合は1桁目と2桁目を足す
            $odd_str = strval($odd);
            $total += $odd_str{0} + $odd_str{1};
        } else {
            $total += $odd;
        }
    }
    for ($i = 1; $i < 16; $i = $i + 2) $total += $no{$i}; //偶数桁を加算
    if ($total % 10 == 0) $res = '正しい番号です。'; else $res = '誤った番号です。'; //10で割り切れるかの判断
} else {
    $res = '半角数字16桁を入力してください。';
}
?>
<FORM method="POST" action="実行するファイル名">
<P>クレジットカード番号 <INPUT size="4" type="text" maxlength="4" name="no1" value="<?=$no1?>">-<INPUT size="4" type="text" maxlength="4" name="no2" value="<?=$no2?>">-<INPUT size="4" type="text" maxlength="4" name="no3" value="<?=$no3?>">-<INPUT size="4" type="text" maxlength="4" name="no4" value="<?=$no4?>"> <INPUT type="submit" value="認証"><?=' ' . $res?></P>
</FORM>


PHPJP.comトップ | 更新情報 | ソースコードの利用について | リンク | お問い合わせ

©PHPJP.com