CodeIgniter的验证码captcha替代类库
发布时间:2016-06-21 18:20 | 人气数:1736
CodeIgniter的验证码captcha使用起来不是特别好用,可以用这个替代类库:
<?php class Captcha { private $width; private $height; private $codeNum; private $code; private $im; function __construct($width=80, $height=30, $codeNum=4){ $this->width = $width; $this->height = $height; $this->codeNum = $codeNum; } function showImg(){ //创建图片 $this->createImg(); //设置干扰元素 $this->setDisturb(); //设置验证码 $this->setCaptcha(); //输出图片 $this->outputImg(); } function getCaptcha(){ $this->createCode(); return $this->code; } private function createImg(){ $this->im = imagecreatetruecolor($this->width, $this->height); $bgColor = imagecolorallocate($this->im, 0, 0, 0); imagefill($this->im, 0, 0, $bgColor); } private function setDisturb(){ $area = ($this->width * $this->height) / 20; $disturbNum = ($area > 250) ? 250 : $area; //加入点干扰 for ($i = 0; $i < $disturbNum; $i++) { $color = imagecolorallocate($this->im, rand(0, 255), rand(0, 255), rand(0, 255)); imagesetpixel($this->im, rand(1, $this->width - 2), rand(1, $this->height - 2), $color); } //加入弧线 for ($i = 0; $i <= 5; $i++) { $color = imagecolorallocate($this->im, rand(128, 255), rand(125, 255), rand(100, 255)); imagearc($this->im, rand(0, $this->width), rand(0, $this->height), rand(30, 300), rand(20, 200), 50, 30, $color); } } private function createCode(){ $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ"; for ($i = 0; $i < $this->codeNum; $i++) { $this->code .= $str{rand(0, strlen($str) - 1)}; } } private function setCaptcha(){ for ($i = 0; $i < $this->codeNum; $i++) { $color = imagecolorallocate($this->im, rand(50, 250), rand(100, 250), rand(128, 250)); $size = rand(floor($this->height / 5), floor($this->height / 3)); $x = floor($this->width / $this->codeNum) * $i + 5; $y = rand(0, $this->height - 20); imagechar($this->im, $size, $x, $y, $this->code{$i}, $color); } } private function outputImg(){ if (imagetypes() & IMG_JPG) { header('Content-type:image/jpeg'); imagejpeg($this->im); } elseif (imagetypes() & IMG_GIF) { header('Content-type: image/gif'); imagegif($this->im); } elseif (imagetype() & IMG_PNG) { header('Content-type: image/png'); imagepng($this->im); } else { die("Don't support image type!"); } } }
如何使用?在Account_Controller控制器中加入如下方法:
public function get_code(){ $this->load->library('captcha'); $code = $this->captcha->getCaptcha(); $this->session->set_userdata('code', $code); $this->captcha->showImg(); }使用http://www.abc.com/account/get_code/?_=12839400获取验证码图片,在如register方法中检查验证码是否正确:
$code = $this->input->post('code'); $code2 = strtolower($this->session->userdata('code')); if(strtolower($code) != $code2){ //…… }OK,就是这样了。
关键词:验证码类, codeigniter, captcha