php 漢字検証コード生成プログラム この PHP 中国語文字検証コード生成プログラムは実際には非常に単純です。中国語文字検証コードを生成するには、生成をサポートするために arial.ttf を使用します。そうしないと、中国語画像検証コードが文字化けします。
phpチュートリアル 漢字検証コード生成プログラム
この PHP 中国語文字検証コード生成プログラムは実際には非常に単純です。中国語文字検証コードを生成するには、生成をサポートするために arial.ttf を使用します。そうしないと、中国語画像検証コードが文字化けします。
*/
クラスセキュアコード
{
プライベート静的 $instance=null;
プライベート $code = '';
プライベート $fontfile;
プライベート $validate;
プライベート $image;
Private $specialadd = 'セキュアコードの特別な文字列';
プライベート $codeexpire=86400;
プライベート $codecookiename='secure_code';/**
*施工方法
*/
プライベート関数 securecode()
{
$this->fontfile = dirname(__file__) '/arial.ttf';
}プライベート関数__construct()
{
$this->securecode();
}
パブリック静的関数 getinstance()
{
if (self::$instance==null)
self::$instance=new self();
return self::$instance;
}/**
* フォントファイルへのパスを指定します。デフォルトは現在のフォルダー内の arial.ttf ファイルです
* @param $fontfile ファイルパス
* @return void
*/
関数loadfont($fontfile)
{
$this->fontfile = $fontfile;
}/**
* 画像出力メソッド。このメソッドを実行する前に、プログラムはいかなる形式の出力も持たないでください
* @return void;
*/
関数ストローク()
{
$this->savecode();
self::sendheader();
imagegif( $this->validate );
Imagedestroy( $this->validate );
imagedestroy( $this->image );
}/**
*写真の保存方法
* @param $filename 保存パス
* @return void
*/
関数 save($filename)
{
$this->savecode();
imagegif( $this->validate , $filename );
imagedestroy( $this->validate );
imagedestroy( $this->image );
}
/**
※認証コードの確認方法
* @param $input 検証する文字列、つまりユーザーの入力
* @return ブール値の検証結果
*/
関数 verify($input)
{
$input=strto lower($input);
$targetcode=$this->認証コード($input);
$code=$this->getcookie();
if (empty($code)||$code!=$targetcode)
$result= false;
それ以外
$result=true;
$_cookie[$this->コードクッキー名]='';
setcookie ( $this->codecookiename, '', - 1 );
$result を返します;
}/**
*画像の作成方法
* @return void;
*/
関数createimage()
{
$this->randcode();
$サイズ = 30;
$width = 90;
$高さ = 35;
$degrees = 配列 (
rand( 0 , 30 )、rand( 0 , 30 )、rand( 0 , 30 )、rand( 0 , 30 )
);
for ($i = 0; $i {
if (rand() % 2);
それ以外の場合 $degrees[$i] = -$degrees[$i];
}
$this->image = imagecreatetruecolor( $size , $size );
$this->validate = imagecreatetruecolor( $width , $height );
$back = imagecolorallocate( $this->image , 255 , 255 , 255 );
$border = imagecolorallocate( $this->image , 0 , 0 , 0 );
imagefilledrectangle( $this->validate , 0 , 0 , $width , $height , $back );
for ($i = 0; $i {
$temp = self::rgbtohsv( rand( 0 , 250 ) , rand( 0 , 150 ) , rand( 0 , 250 ) );
if ($temp[2] > 60) $temp[2] = 60;
$temp = self::hsvtorgb( $temp[0] , $temp[1] , $temp[2] );
$textcolor[$i] = imagecolorallocate( $this->image , $temp[0] , $temp[1] , $temp[2] );
}
for ($i = 0; $i {
$randpixelcolor = imagecolorallocate( $this->validate , rand( 0 , 255 ) , rand( 0 , 255 ) , rand( 0 , 255 ) );
imagesetpixel( $this->validate , rand( 1 , 87 ) , rand( 1 , 35 ) , $randpixelcolor );
}
$temp = self::rgbtohsv( rand( 220 , 255 ) , rand( 220 , 255 ) , rand( 220 , 255 ) );
if ($temp[2]
$temp = self::hsvtorgb( $temp[0] , $temp[1] , $temp[2] );
$randlinecolor = imagecolorallocate( $this->image , $temp[0] , $temp[1] , $temp[2] );
self::imagelinethick( $this->validate , $textcolor[rand( 0 , 3 )] );
imagefilledrectangle( $this->image , 0 , 0 , $size , $size , $back );
putenv( 'gdfontpath=' . realpath( '.' ) );
// 使用するフォントの名前を指定します (拡張子 .ttf がないことに注意してください
) imagettftext( $this->image , 15 , 0 , 8 , 20 , $textcolor[0] , $this->fontfile , $this->code[0] );
$this->image = imagerotate( $this->image , $degrees[0] , $back );
imagecolortransparent( $this->image , $back );
imagecopymerge( $this->validate , $this->image , 1 , 4 , 4 , 5 , imagex( $this->image ) - 10 , imagesy( $this->image ) - 10 , 100 ) ;
$this->image = imagecreatetruecolor( $size , $size );
imagefilledrectangle( $this->image , 0 , 0 , $size , $size , $back );
imagettftext( $this->image , 15 , 0 , 8 , 20 , $textcolor[1] , $this->fontfile , $this->code[1] );
$this->image = imagerotate( $this->image , $degrees[1] , $back );
imagecolortransparent( $this->image , $back );
imagecopymerge( $this->validate , $this->image , 21 , 4 , 4 , 5 , imagex( $this->image ) - 10 , imagesy( $this->image ) - 10 , 100 ) ;
$this->image = imagecreatetruecolor( $size , $size );
imagefilledrectangle( $this->image , 0 , 0 , $size - 1 , $size - 1 , $back );
imagettftext( $this->image , 15 , 0 , 8 , 20 , $textcolor[2] , $this->fontfile , $this->code[2] );
$this->image = imagerotate( $this->image , $degrees[2] , $back );
imagecolortransparent( $this->image , $back );
imagecopymerge( $this->validate , $this->image , 41 , 4 , 4 , 5 , imagex( $this->image ) - 10 , imagesy( $this->image ) - 10 , 100 ) ;
$this->image = imagecreatetruecolor( $size , $size );
imagefilledrectangle( $this->image , 0 , 0 , $size - 1 , $size - 1 , $back );
imagettftext( $this->image , 15 , 0 , 8 , 20 , $textcolor[3] , $this->fontfile , $this->code[3] );
$this->image = imagerotate( $this->image , $degrees[3] , $back );
imagecolortransparent( $this->image , $back );
imagecopymerge( $this->validate , $this->image , 61 , 4 , 4 , 5 , imagex( $this->image ) - 10 , imagesy( $this->image ) - 10 , 100 ) ;
imagerectangle( $this->validate , 0 , 0 , $width - 1 , $height - 1 , $border );
}
1 2 3