<?php //// 验证码代码
$code = new Code(); $code->outImage();
class Code { ///验证码个数 protected $number; ///验证码类型 protected $codeType; ///图形宽度 protected $width; ///图形高度 protected $height; ///图形资源 protected $image; ///验证码字符串 protected $code;
public function __construct( $number=4, $codeType=2, $width=100, $height=50 ) { ///初始化自己的成员属性 $this->number = $number; $this->codeType = $codeType; $this->width = $width; $this->height = $height;
////生成验证码函数 $this->code = $this->createCode();
}
public function __destruct(){ imagedestroy($this->image); }
public function __get( $name ) { if ( $name == 'code' ) { return $this->code; } return false; }
protected function createCode() { ///通过验证码类型生成不同的验证码 switch ( $this->codeType ) { case 0: ///纯数字 $code = $this->getNumberCode(); break; case 1: ///纯字母 $code = $this->getCharCode(); break; case 2: ///数字和字母混合 $code = $this->getNumCharCode(); break; default: die( "不支持这种验证码类型" ); } return $code; }
protected function getNumberCode() { $str = join( '', range( 0, 9 ) ); return substr( str_shuffle( $str ), 0, $this->number ); } protected function getCharCode() { $str = join( '', range( 'a', 'z' ) ); $str = $str . strtoupper( $str ); return substr( str_shuffle( $str ), 0, $this->number ); }
protected function getNumCharCode() { $numStr = join( '', range( 0, 9 ) ); $str = join( '', range( 'a', 'z' ) ); $str = $numStr . $str . strtoupper( $str ); return substr( str_shuffle( $str ), 0, $this->number ); }
protected function createImage(){ $this->image=imagecreatetruecolor($this->width,$this->height); }
protected function fillBack(){ imagefill($this->image,0,0,$this->lightColor()); }
protected function lightColor(){ return imagecolorallocate($this->image,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255)); } protected function darkColor(){ return imagecolorallocate($this->image,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); } protected function drawChar(){ $width=ceil($this->width/$this->number); for($i=0;$i<$this->number;$i++){ $x=mt_rand($i*$width+5,($i+1)*$width-10); $y=mt_rand(0,$this->height-15);
imagechar($this->image,5,$x,$y,$this->code[$i],$this->darkColor()); } }
protected function drawDisturb(){ for($i=0;$i<150;$i++){ $x=mt_rand(0,$this->width); $y=mt_rand(0,$this->height); imagesetpixel($this->image,$x,$y,$this->lightColor()); } }
protected function show(){ header('Content-Type:image/png'); imagepng($this->image); }
public function outImage(){ ///创建画布 $this->createImage(); ///填充背景色 $this->fillBack(); ///将验证码字符串画到画布中 $this->drawChar(); ///添加干扰元素 $this->drawDisturb(); ///输出并且显示 $this->show();
}
}
?>
|
请发表评论