スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] 簡易なCAPTCHA

chr2img

ランダムな数値4ケタの表示。 背景・フォント色は一定幅でランダム変化。
実用については、画像生成の際に生成したランダム数値をセッションなりに保存し、
フォームの入力が行われた際に比較します。

動作条件:
GD必須。このサーバは PHP5ですが、4でも問題ないでしょう。


<?php

//###------------------------------
//### 設定
//###------------------------------
$img_width = 100;
$img_height = 32;

//===========================================================
// ランダム色を生成
// 引数:画像ID(参照), 基本色値, ランダム幅
//===========================================================
function GetRandColor( &$img, $base, $wid ){

$col = imagecolorallocate( $img, $base, $base, $base );
$rgb[0] = $base;
$rgb[1] = $base;
$rgb[2] = $base;
$rd = 0;

for( $i = 0; $i < 3; $i++ ){
$rd = mt_rand( ( $wid * -1 ), $wid );
$rgb[$i] += $rd;
if( $rgb[$i] < 0 ){
$rgb[$i] = 0;
}
elseif( $rgb[$i] > 255 ){
$rgb[$i] = 255;
}
}

$col = imagecolorallocate( $img, $rgb[0], $rgb[1], $rgb[2] );
return( $col );

}

//###-----------------------------
//### 新規画像の作成
//###-----------------------------
$img = imagecreate( $img_width, $img_height ) or die ("Err : Initialize new GD image.");

//###-----------------------------
//### 背景セット
//###-----------------------------
$img_bg_col = GetRandColor( $img, 240, 10 );
imagefill($img, 0, 0, $img_bg_col);

//###-----------------------------
//### 文字出力
//###-----------------------------
//出力数字生成
$no = mt_rand( 1000, 9999 );
//文字色設定
$font_color = GetRandColor( $img, 80, 10 );
//わずかに位置をずらして表示
for( $i = 0; $i < 4; $i++ ){
$ch = substr( $no, $i, 1 );
$rd = mt_rand( -3, 3 );
imagestring( $img, 5, 16 + ( 20 * $i ) + $rd, 6, $ch, $font_color );
}

//###-----------------------------
//### PNG画像の出力
//###-----------------------------
header( "Content-type: image/png" );
header( "Cache-control: no-cache" );
imagepng($img);

//###-----------------------------
//### 終期処理
//###-----------------------------
imagedestroy($img);

?>
関連記事
スポンサーサイト

comment

管理者にだけメッセージを送る

検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。