php 生成中文验证码,php 中文汉字验证码生成程序(1/3)_PHP教程

class securecode

{

private static $instance=null;

private $code = '';

private $fontfile;

private $validate;

private $image;

private $specialadd = 'special string for securecode';

private $codeexpire=86400;

private $codecookiename='secure_code';

/**

* 构造方法

*/

private function securecode()

{

$this->fontfile = dirname( __file__ ) . '/arial.ttf';

}

private function __construct()

{

$this->securecode();

}

public static function getinstance()

{

if (self::$instance==null)

self::$instance=new self();

return self::$instance;

}

/**

* 指定字体文件所在路径,默认为当前文件夹下arial.ttf文件

* @param $fontfile 文件路径

* @return void

*/

function loadfont($fontfile)

{

$this->fontfile = $fontfile;

}

/**

* 图片输出方法,在执行本方法前程序不应该有任何形式的输出

* @return void;

*/

function stroke()

{

$this->savecode();

self::sendheader();

imagegif( $this->validate );

imagedestroy( $this->validate );

imagedestroy( $this->image );

}

/**

* 图片保存方法

* @param $filename 保存路径

* @return void

*/

function save($filename)

{

$this->savecode();

imagegif( $this->validate , $filename );

imagedestroy( $this->validate );

imagedestroy( $this->image );

}

/**

* 验证码验证方法

* @param $input 要验证的字符串,即用户的输入内容

* @return boolean 验证结果

*/

function verify($input)

{

$input=strtolower($input);

$targetcode=$this->authcode($input);

$code=$this->getcookie();

if (empty($code)||$code!=$targetcode)

$result= false;

else

$result=true;

$_cookie[$this->codecookiename]='';

setcookie ( $this->codecookiename, '', - 1 );

return $result;

}

/**

* 图片创建方法

* @return void;

*/

function createimage()

{

$this->randcode();

$size = 30;

$width = 90;

$height = 35;

$degrees = array (

rand( 0 , 30 ), rand( 0 , 30 ), rand( 0 , 30 ), rand( 0 , 30 )

);

for ($i = 0; $i < 4; ++$i)

{

if (rand() % 2);

else $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 < 4; ++$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 < 200; ++$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] < 200) $temp[2] = 255;

$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( '.' ) );

// name the font to be used (note the lack of the .ttf extension

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 , imagesx( $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 , imagesx( $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 , imagesx( $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 , imagesx( $this->image ) - 10 , imagesy( $this->image ) - 10 , 100 );

imagerectangle( $this->validate , 0 , 0 , $width - 1 , $height - 1 , $border );

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值