霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

php验证码类

我们在写用户验证页面,如注册,登录的时候,为了加强用户登录的安全性,添加验证码验证。验证码通过GD生成PNG图片,并把$randval随机数字赋给$_SESSION[‘login_check’],在通过用户输入的$_POST进行比较,来判断是否正确。达到需要实现的功能,需要修改php.ini文件,使php支持GD库。本文提供一个简单的PHP生成验证码类。

mCheckCode = strtoupper(substr(md5(rand()),0,$this->mCheckCodeNum));

return $this->mCheckCode;

}


/**

*

* @brief  产生验证码图片

*

*/

private function CreateImage()

{

$this->mCheckImage = @imagecreate ($this->mCheckImageWidth,$this->mCheckImageHeight);

imagecolorallocate ($this->mCheckImage, 200, 200, 200);

return $this->mCheckImage;

}

/**

*

* @brief  设置图片的干扰像素

*

*/

private function SetDisturbColor()

{

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

{

$this->mDisturbColor = imagecolorallocate ($this->mCheckImage, rand(0,255), rand(0,255), rand(0,255));

imagesetpixel($this->mCheckImage,rand(2,128),rand(2,38),$this->mDisturbColor);

}

}

/**

*

* @brief  设置验证码图片的大小

*

* @param  $width  宽

*

* @param  $height 高

*

*/

public function SetCheckImageWH($width,$height)

{

if($width==''||$height=='')return false;

$this->mCheckImageWidth  = $width;

$this->mCheckImageHeight = $height;

return true;

}

/**

*

* @brief  在验证码图片上逐个画上验证码

*

*/

private function WriteCheckCodeToImage()

{

for ($i=0;$i<=$this->mCheckCodeNum;$i++)

{

$bg_color = imagecolorallocate ($this->mCheckImage, rand(0,255), rand(0,128), rand(0,255));

$x = floor($this->mCheckImageWidth/$this->mCheckCodeNum)*$i;

$y = rand(0,$this->mCheckImageHeight-15);

imagechar ($this->mCheckImage, 5, $x, $y, $this->mCheckCode[$i], $bg_color);

}

}

/**

*

* @brief  输出验证码图片

*

*/

public function OutCheckImage()

{

$this ->OutFileHeader();

$this ->CreateCheckCode();

$this ->CreateImage();

$this ->SetDisturbColor();

$this ->WriteCheckCodeToImage();

imagepng($this->mCheckImage);

imagedestroy($this->mCheckImage);

}

}

$c_check_code_image = new CCheckCodeFile();

//$c_check_code_image ->SetCheckImageWH(100,50);//设置显示验证码图片的尺寸

$c_check_code_image ->OutCheckImage();
?>

如果要增强安全性,将此功能投入商业应用,则可以通过以下几个步骤实现:

1. 启用Session。

2. 生成验证码并计算md5值,存入session。

3. 将用户的输入计算md5值后,与session中的md5值对比得出验证结果。