/application/libraries/Captcha.php
PHP | 87 lines | 69 code | 8 blank | 10 comment | 5 complexity | b55102a869afbfb8b2837258282a71ce MD5 | raw file
- <?php
- if (!defined('BASEPATH'))
- exit('No direct script access allowed');
-
- class Captcha
- {
- private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子
- private $code; //验证码
- private $codelen = 4; //验证码长度
- private $width = 300; //宽度
- private $height = 50; //高度
- private $img; //图形资源句柄
- private $font; //指定的字体
- private $fontsize = 30; //指定字体大小
- private $fontcolor; //指定字体颜色
- //构造方法初始化
- public function __construct($config)
- {
- $this->font = empty($config['font_file']) ? './css/fonts/elephant.ttf' : $config['font_file'];
- $this->createBg();
- $this->createCode();
- }
-
- //生成随机码
- private function createCode()
- {
- $_len = strlen($this->charset) - 1;
- for ($i = 0; $i < $this->codelen; $i++) {
- $this->code .= $this->charset[mt_rand(0, $_len)];
- }
- }
-
- //生成背景
- private function createBg()
- {
- $this->img = imagecreatetruecolor($this->width, $this->height);
- $color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
- imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color);
- }
-
- //生成文字
- private function createFont()
- {
- $_x = $this->width / $this->codelen;
- for ($i = 0; $i < $this->codelen; $i++) {
- $this->fontcolor = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
- imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $this->fontcolor, $this->font, $this->code[$i]);
- }
- }
-
- //生成线条、雪花
- private function createLine()
- {
- //线条
- for ($i = 0; $i < 6; $i++) {
- $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
- imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
- }
- //雪花
- for ($i = 0; $i < 100; $i++) {
- $color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
- imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
- }
- }
-
- //输出
- private function outPut()
- {
- header('Content-type:image/png');
- imagepng($this->img);
- imagedestroy($this->img);
- }
-
- //对外生成
- public function doimg()
- {
- $this->createLine();
- $this->createFont();
- $this->outPut();
- }
-
- //获取验证码
- public function getCode()
- {
- return strtolower($this->code);
- }
- }