【PHP】クレジットカードチェックサンプル

クレジットカードのチェックをするときに使うPHPのFunctionです。


チェックしたいクレジットカード番号を入力してください。
本当のクレジットカード番号は入力しないでください。
ここで入力されたデータの責任はとれません。

また、このチェックはPHP上で正しい番号が入力されているかをチェックするだけです。
DBでのチェックや与信まではチェックしません。
成功・失敗例を元に入力してください。

- - -


成功例:4417-1234-5678-9113
失敗例:4417-1234-5678-9114


クレジットカード番号の意味
1)最初の1桁:主要産業識別子 (MII:Major industry identifier)。カード発行者の業界を表します。
0 予備
1、2 航空
3 旅行・娯楽
4、5 銀行・金融
6 商品輸送・銀行
7 石油
8 通信
9 国ごとの割り当て分

2)MIIを含む最初6桁:発行者識別番号(IIN:Issuer Identifier Number)。カード発行者の身元を表します。
[主要クレジットカードのIIN]
Visa 4xxxxx
Mastercard 51xxxx - 55xxxx
Discover 6011xx, 644xxx, 65xxxx
Amex 34xxxx, 37xxxx

3)7桁目以降、最後1桁の前の数まで:カード口座番号。コンビネーションは1兆通り。

4)最後の1桁:チェックディジット、別名チェックサム。そのクレジットカードの番号が有効かどうかLuhnアルゴリズムで認証するとき使います。


ソースコード


function checkCard(){
	//変数の初期化
	$card = "";
	$check = "";
	
	//クレジットカードのタイプ 最初の一桁
	$type = array(0=>"予備",1=>"航空",2=>"航空",3=>"旅行・娯楽",4=>"銀行・金融",5=>"銀行・金融",6=>"商品輸送・銀行",7=>"石油",8=>"通信",9=>"国ごとの割り当て分");
	
	//ポストデータをエスケープ
	$_POST = array_map("htmlspecialchars",$_POST);
	
	//データを一つにまとめる
	for( $i = 1; $i <= 4; $i++ ){
		$card .= $_POST["card_".$i];
	}
	
	//数値以外はエラーを返す。
	if( !is_numeric( $card ) ){
		return "半角数字で入力してください。";
	}
	
	//文字列を配列に分解
	$card = str_split($card);
	
	//数字の数だけループする
	for( $i = 0; $i < 16; $i++ ){
		//奇数の場合のみ2倍する
		if( $i % 2 == 0 ) {
			$card[$i] = $card[$i] * 2;
		}
		//2桁の場合は分割して足す
		if( mb_strlen( $card[$i] ) != 1 ){
			$split = str_split($card[$i]);
			$card[$i] = $split[0] + $split[1];
		}
		$check += $card[$i];
	}

	if( $check % 10 == 0 ){
		return "<font color='blue'>正しいクレジットカード番号です。<br />このカードは「".$type[$card[0]]."」で使われるカードです。</font>";
	}else{
		return "<font color='red'>クレジットカードが無効です。</font>";
	}
}




Copyright © 2010-2011 SOLAT -DEV- 開発ブログ