PHP验证码代码

<?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();

}

}

?>