1.php-实现验证码

需要:GD2模块
函数:
1.imagecreatetruecolor(int $width,int $height): 返回图片标识符
2.imagefilledrectangle(resource $image,int $x1,int $y1,int x2,int y2,int $color):画一个矩形并填充
3.imagettftext(resource $image,float $size,float $angle,int $x,$int $y,int $color,string $fontfile, string $text):用TrueType字体向图像写入文本
4.imagecolorallocate(resource $image,int $red,int $green,int $blue) :为图片分配颜色
5.imagesetpixel(resource $image,int $x,int $y, int $color):画一个单一像素
6.imageline(resource $image,int $x1,int $y1,int $x2,int $y2,int $color):画一条线段

StringFactory:生产验证码所需字符串
class StringFactory{         
//生成验证码需要的字符串
   public static function verityString($type = 1, $len = 4)
   {     
     if (1 === $type) {
         $chars = implode(range(0, 9));
      } elseif (2 === $type) { 
        $chars = implode(array_merge(range('a', 'z'), range('A', 'Z'))); 
     } else {
         $chars = implode(array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)));
      } if ($len > strlen($chars)) {
         return '字符串长度超出限制';
      }
      $chars = mb_substr(str_shuffle($chars), 0, $len);
      return $chars;
   }
}
class Verify{
   private $link;
   private $width; 
   private $height;

   public function __construct($width = 80, $height = 30)   { 
     $this->link = imagecreatetruecolor($width, $height);
     $this->width = $width;      $this->height = $height;
   }     
 public function getVerify($fontPath, $sessionName = 'verifyCodeVal', $type = 1, $len = 4, $pixel = 50, $line = 5)   { 
     if (!isset($_SESSION)) {  
       session_start();
      }     
 imagefilledrectangle($this->link, 1, 1, $this->width - 2, $this->height - 2, $this->getColor('white'));      $chars = StringFactory::verityString($type, $len);      $_SESSION[$sessionName] = $chars;      for ($i = 0; $i < $len; $i++) {         $fontSize = mt_rand(14, 18);         $angle = mt_rand(-15, 15);         $x = ($this->width - 2) * $i / 4 + 2;         $y = mt_rand(20, $this->height - 1);         $color = $this->getColor('dark');         $text = mb_substr($chars, $i, 1, 'utf-8');         imagettftext($this->link, $fontSize, $angle, $x, $y, $color, $fontPath, $text);      }      $this->setPixel($pixel);      $this->setLine($line);            header('content-type:images/gif');      imagegif($this->link);      imagedestroy($this->link);   }         public function getColor($type = 'random')   {      if ('white' === $type) {         $r = 255;         $g = 255;         $b = 255;      } elseif ('black' === $type) {         $r = 0;         $g = 0;         $b = 0;      } elseif ('dark' === $type) {         $r = mt_rand(0, 100);         $g = mt_rand(0, 180);         $b = mt_rand(0, 200);      } else {         $r = mt_rand(0, 255);         $g = mt_rand(0, 255);         $b = mt_rand(0, 255);      }      $color = imagecolorallocate($this->link, $r, $g, $b);      return $color;   }      public function setPixel($count)   {      for ($i = 0; $i < $count; $i++) {         imagesetpixel($this->link, mt_rand(1, $this->width - 1), mt_rand(1, $this->height - 1), $this->getColor('dark'));      }   }      public function setLine($count)   {      for ($i = 0; $i < $count; $i++) {         imageline($this->link, mt_rand(1, $this->width - 1), mt_rand(1, $this->height - 1), mt_rand(1, $this->width - 1), mt_rand(1, $this->height - 1), $this->getColor());      }   }}

你可能感兴趣的:(1.php-实现验证码)