ここ を参考にクレジットカード不正番号チェックを作ってみました。動作ページ
ソースは以下。
<?php
function checkCreditNumber($input){
$sum=0;
for($i=1;$i<=4;$i++){
if(strlen($input["no".$i])!=4 || !is_numeric($input["no".$i])){
return "数字4桁入力してください。";
}
}
for($i=1;$i<=4;$i++){
$val= $input["no".$i];
$sum += $val{0};
$v = $val{1}*2;
if($v>=10){
$v -= 9;
}
$sum += $v;
$sum += $val{2};
$v = $val{3}*2;
if($v>=10){
$v -= 9;
}
$sum += $v;
}
if($sum !== 0 && $sum%10 === 0){
return "カード番号 ". $input["no1"]."-".$input["no2"]."-".$input["no3"]."-".$input["no4"]." は不正ではありません。";
}else{
return "カード番号 ". $input["no1"]."-".$input["no2"]."-".$input["no3"]."-".$input["no4"]." は不正です。";
}
}
$input = $_POST;
$result = "";
if(count($input)>0){
$result = checkCreditNumber($input);
}
?>
<html>
<body>
<h1>クレジットカード不正番号チェック</h1>
<p>カード番号を入力すると、不正がどうか判定します。</p>
<form action="./" method="post">
<input type="text" maxlength=4 size=4 name="no1" value="<?php if(isset($input["no1"])) echo $input["no1"]; ?>" /> -
<input type="text" maxlength=4 size=4 name="no2" value="<?php if(isset($input["no2"])) echo $input["no2"]; ?>" /> -
<input type="text" maxlength=4 size=4 name="no3" value="<?php if(isset($input["no3"])) echo $input["no3"]; ?>" /> -
<input type="text" maxlength=4 size=4 name="no4" value="<?php if(isset($input["no4"])) echo $input["no4"]; ?>" />
<input type="submit" value="check" />
</form>
<?php
if($result){
?>
<p><?php echo $result;?></p>
<?php
}
?>
</body>
</html>
phpの$変数{インデント}は文字列一文字ずつ扱うのに簡単で便利です。