ホームページ >バックエンド開発 >PHPチュートリアル >PHP 簡単な検証コード クラス: 文字 + 数字、ランダム フォントの歪み_PHP チュートリアル
現在、さまざまな種類の確認コードが存在しますが、個人的には、確認コードはユーザーが見るものであるため、シンプルな方が良いと考えています。干渉コード、傾斜、複雑な背景はすべてユーザーにとって一種の拷問です。
:エクスペリエンスが優れた Web サイトは比較的シンプルで、複雑な背景や干渉コードがなく、背景もありません。
うまく書かれていない点があれば、批判や指摘をしてください。
[php]
if (!define('IS_INITPHP')) exit('アクセスが拒否されました!');
/*************************************************** * *********************************
* InitPHP 2.0 国産 PHP 開発フレームワーク 拡張クラスライブラリ - 検証コード
*------------------------------------------------ - ---------------------------------
* 著作権: CopyRight By initphp.com
※このソースコードはご自由にお使いいただけますが、ご使用の際は作者情報を保管しておいてください。他人の労働の成果を尊重することは、自分自身を尊重することです
*------------------------------------------------ - ---------------------------------
* $作者:liuxinming
* $Dtime:2012-10-09
************************************************* * *********************************/
クラス seccodeInit{
プライベート $width
プライベート $身長
Private $type=0;// 0 文字 + 数字の確認コード
Private $time=3000;//認証コードの有効期限 (秒)
Private $color=null;//検証コードのフォントの色
プライベート
Private $length=4;//検証コードの長さ
プライベート $warping;//ランダムな歪み
/**
* ランダムな値を取得します
* @戻り文字列
*/
プライベート関数 get_random_val() {
$i=0;
while($i<$this->length)
mt_srand((double)microtime()*1000000);
$randnum=mt_rand(50,90);
If(!in_array($randnum,array(58,59,60,61,62,63,64,73,79)))
$authnum=$authnum.chr($randnum);
$i++;
}
セッション開始();
$time=time();
$checkcode=md5(md5($authnum.'initphpYzmsy'.$time));
$key=$time.','.$checkcode.','.authnum;
$_SESSION['initphp_code'] = $key;
$authnum を返します。
}
/**
* 認証コードの画像を取得します
* @param $width幅
* @param $height high
* @param $warping フォントのランダムな歪みスイッチ 0=オフ、1=オン
* @戻り文字列
*/
パブリック関数 getcode($width=140,$height=40,$warping=0){
$this->width=$width;
$this->height=$height;
$this->warping=$warping;
if($this->type<2&& function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecopyresize') && function_exists('imagecolorallocate') && function_exists('imagechar') && function_exists('imagecolorsforindex' ) &&
function_exists('imageline') && function_exists('imagecreatefromstring') && (function_exists('imagegif') || function_exists('imagepng') || function_exists('imagejpeg'))){
$this->image();
}
}
/**
* 画像認証コードを生成します
* @戻り文字列
*/
パブリック関数 image(){
$this->im=imagecreate($this->width, $this->height);//画像の背景サイズを設定します
Imagecolorallocate($this->im, 243, 251, 254);// 背景を設定します
$this->color=imagecolorallocate($this->im, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));// 確認コードのフォントのランダムな色
$ttfPath = dirname(__FILE__) '/font/';//フォント ディレクトリ
$dirs = opendir($ttfPath);
$seccodettf = array();
while($entry = readdir($dirs)) {
if($entry != '.' && $entry != '..' && in_array(strto lower(addslashes(strto lower(substr(strrchr($entry, '.'), 1, 10)))), array(' ttf'、'ttc'))) {
}
$ttf = $seccodettf[array_rand($seccodettf)];// ランダムなフォント
$size = $this->type ? $this->width / 7 : $this->width / 6;//フォントサイズ
Imagettftext($this->im,$size, 0, 10, $size*1.2, $this->color, $ttf, $this->get_random_val());// 検証コード文字を設定します
If($this->warping){//ランダム ワーピング
$this->setWarping();
}
If(function_exists("imagepng"))
ヘッダー ("コンテンツ タイプ: image/png");
$code=imagepng($this->im);
}elseif (function_exists("imagejpeg"))
ヘッダー ("コンテンツ タイプ: image/jpeg");
$code=imagejpeg($this->im);
}elseif (function_exists("imagegif"))
header("コンテンツタイプ: 画像/gif");
$code=imagegif($this->im);
}
Imagedestroy($this->im);
$code を返します
}
/**
* 確認コードを確認してください
* @param $code
* @return bool
*/
パブリック関数 checkCode($code) {
セッション開始();
$secode=explode(',', $_SESSION['initphp_code']);
$time=time();
// 時間が経過したかどうかを確認します
If($secode[0]>$time||$time-$secode[0]>$this->time)
false を返します
}
//確認コードキーは md5 を二重にしても一貫性があります
If($secode[1]<>md5(md5($code.'initphpYzmsy'.$secode[0]))){
false を返します
}
//検証コード文字列が一致しているかどうかを確認します
If($code||$code<>$secode[2])
false を返します
}
true を返します
}
/*ランダムな歪み*/
パブリック関数 setWarping(){
$rgb=array();
$direct=rand(0,1);
$width = imagex($this->im);
$height = imagey($this->im);
$level=$width /20;
for($j = 0;$j
for($i = 0;$i
$rgb[$i] = imagecolorat($this->im, $i, $j);
for($i = 0;$i
$r = sin($j / $height * 2 * M_PI - M_PI * 0.5) * ($direct ? $level : -$level
);
imagesetpixel($this->im, $i + $r, $j, $rgb[$i]);
}
}
}
?>
効果:
http://www.bkjia.com/PHPjc/477945.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/477945.html