ホームページ >バックエンド開発 >PHPチュートリアル >PHP 簡単な検証コード クラス: 文字 + 数字、ランダム フォントの歪み_PHP チュートリアル

PHP 簡単な検証コード クラス: 文字 + 数字、ランダム フォントの歪み_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:54:271120ブラウズ

現在、さまざまな種類の確認コードが存在しますが、個人的には、確認コードはユーザーが見るものであるため、シンプルな方が良いと考えています。干渉コード、傾斜、複雑な背景はすべてユーザーにとって一種の拷問です。
:エクスペリエンスが優れた 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.htmlPHP 簡単な検証コード クラス: 文字 + 数字、ランダム フォントの歪み_PHP チュートリアル

技術記事

最近は色々な認証コードがあるので、認証コードはユーザーが見るものなのでシンプルな方が良いと個人的には思っています。干渉コード、傾斜、複雑な背景はすべてユーザーにとって一種の拷問です。 見てください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。