非常实用的php验证码类

本文实例为大家分享了php验证码类,供大家参考,具体内容如下

<?php
/**
 *
 * @author Administrator
 *
 */
class ValidateCode{ 

  private $width;
  private $height;
  private $codeNum;
  private $img_resouce;
  private $disturbColorNum;
  private $checkCode; 

  function __construct($width=80,$height=20,$codeNum=4) {
    $this->width=$width;
    $this->height=$height;
    $this->codeNum=$codeNum;
    $this->checkCode=$this->CreateCheckCode();
    $number=floor($width*$height/25);
    if ($number>240-$codeNum) {
      $this->disturbColorNum=240-$codeNum;
    }else{
      $this->disturbColorNum=$number;
    }
  } 

  public function showImage($fontpath='') {
    //创建图像背景
    $this->Img_resouce();
    //var_dump($img_resouce);
    //设置干扰元素
    $this->setDistructcolor();
    //向图像中随机画出文本
    $this->outputtext($fontpath);
    //输出图像
    $this->outputimage();
  }
  /**
   *
   *获取随机创建的验证码
   */
  public function getCheckCode(){ 

  }
  private function Img_resouce(){
    //创建一个真彩图像
    $this->img_resouce=imagecreatetruecolor($this->width,$this->height);
    //随机设置图像背景
    $backcolor=imagecolorallocate($this->img_resouce,rand(225,255),rand(225,255),rand(225,255));
    //填充颜色
    imagefill($this->img_resouce, 0, 0, $backcolor);
    //设置边框背景
    $border=imagecolorallocate($this->img_resouce, 0,0,0);
    //画一个矩形
    imagerectangle($this->img_resouce,0,0,$this->width-1,$this->height-1,$border);
  }
  private function setDistructcolor(){
    //绘画干扰点
    for ($i = 0; $i <$this->disturbColorNum; $i++) { 

      imagesetpixel($this->img_resouce, rand(1, $this->width-2), rand(1, $this->height-2), rand(0,255));
    } 

    //绘画干扰线
    for ($j = 0; $j <3; $j++) {
      $linecolor=imagecolorallocate($this->img_resouce,rand(0,255),rand(0,255),rand(0,255));
      imagearc($this->img_resouce, rand(0,$this->width), rand(0,$this->height),
       rand(10, 225), rand(20, 150),
       55, 44, $linecolor);
    }
  }
  private function CreateCheckCode(){
    $code='23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ';
    $string='';
    for ($i = 0; $i < $this->codeNum; $i++) { 

      $char=$code{rand(0, strlen($code)-1)};
      $string.=$char;
    }
    return $string;
  }
  private function outputtext($fontpath=''){
    for ($i = 0; $i < $this->codeNum; $i++) {
      $fontcolor=imagecolorallocate($this->img_resouce, rand(0,128), rand(0, 128), rand(0, 128));
      if ($fontpath=='') { 

         $fontsize=rand(3, 5);
         $x=floor($this->width/$this->codeNum)*$i+3;
         $y=rand(0, $this->height-20);
         imagechar($this->img_resouce, $fontsize, $x, $y, $this->checkCode{$i}, $fontcolor);
    }else{
         $fontsize=rand(12, 16);
         $x=floor(($this->width-8)/$this->codeNum)*$i+8;
         $y=rand($fontsize, $this->height-15);
         imagettftext($this->img_resouce,$fontsize,rand(-45,45),$x,$y,$fontcolor,fontpath,$this->checkCode{$i});
       }
    }
  }
  private function outputimage() { 

    if (imagetypes() & IMG_GIF) {
      header("Content-type: image/gif");
      imagegif($this->img_resouce);
    }else if(imagetypes() & IMG_JPEG) {
      header("Content-type: image/jpeg");
      imagejpeg($this->img_resouce);
    }else if(imagetypes() & IMG_PNG) {
      header("Content-type: image/png");
      imagepng($this->img_resouce);
    }else {
      echo "PHP不支持的类型";
    } 

  }
  private function __destruct(){ 

    imagedestroy($this->img_resouce);
  }
}
?>

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • PHP实现适用于自定义的验证码类

    本文实例为大家分享了PHP验证码类,利用对象来实现的验证码类,供大家参考,具体内容如下 <?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ Class Image{ privat

  • 分享一个漂亮的php验证码类

    本文实例为大家分享了一个漂亮的php验证码类,供大家参考,具体内容如下 //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 private $width = 130;//宽度 private $height = 50;//高度 privat

  • 一个简单安全的PHP验证码类 附调用方法

    一.验证码示例 二.php验证码类,secoder.class.php <?php /** * 安全验证码 * * 安全的验证码要:验证码文字扭曲.旋转,使用不同字体,添加干扰码 * * @author 流水孟春 <cmpan(at)qq.com> * @link http://labs.yulans.cn/YL_Security_Secoder * @link http://wiki.yulans.cn/docs/yl/security/secoder */ class YL_Secu

  • 一个实用的php验证码类

    万能php验证码类,供大家参考,具体内容如下 code.php是验证码类,类的名称最好和文件名的名称一样,这样有利于我们的查看. code.php <?php header('Content-type:text/html;charset=utf8'); class Code{ // 验证码个数$number protected $number; // 验证码类型$codeType protected $codeType; // 验证码图像宽度$width protected $width; //

  • PHP实现简单实用的验证码类

    本文实例讲述了PHP实现简单实用的验证码类.分享给大家供大家参考.具体如下: <?php /** * @version 1.0 * @author bolted snail * @date 2011-10-15 * @PHP验证码类 * 使用方法: * $image=new Captcha(); * $image->config('宽度','高度','字符个数','验证码session索引'); * $image->create();//这样就会向浏览器输出一张图片 * //所有参数都可

  • 一个经典的PHP验证码类分享

    我们通过PHP的GD库图像处理内容,设计一个验证码类Vcode.将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中.只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度.高度及验证码字母个数,就可以成功创建一个验证码类的对象.该类的声明代码如下所示: <?php class Vcode { private $width; //宽 private $height; //高 private $num; //数量 private $code

  • 一个简单安全的PHP验证码类、PHP验证码

    一,验证码示例 二,php验证码类,secoder.class.php <?php /** * 安全验证码 * * 安全的验证码要:验证码文字扭曲.旋转,使用不同字体,添加干扰码 * * @author 流水孟春 <cmpan(at)qq.com> * @link http://labs.yulans.cn/YL_Security_Secoder * @link http://wiki.yulans.cn/docs/yl/security/secoder */ class YL_Secu

  • 一个漂亮的php验证码类(分享)

    直接上代码: 复制代码 代码如下: //验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 private $width = 130;//宽度 private $height = 50;//高度 private $img;//图形资源句柄 pri

  • PHP验证码类ValidateCode解析

    PHP解析验证码类 1.开始 在网上看到使用PHP写的ValidateCode生成验证码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $charset = 'abcdefghjkmnprstuvwxyzABCDEFGJKMNPRSTUVWXYZ23456789'; private $code; private $codeLen = 4; private $width = 130; private $heigh = 50; p

  • PHP验证码类代码( 最新修改,完全定制化! )

    Authnum.class.php 下载 复制代码 代码如下: <?php session_start(); class Authnum { //图片对象.宽度.高度.验证码长度 private $im; private $im_width; private $im_height; private $len; //随机字符串.y轴坐标值.随机颜色 private $randnum; private $y; private $randcolor; //背景色的红绿蓝,默认是浅灰色 public $

  • PHP编写的图片验证码类文件分享

    适用于自定义的验证码类! <?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ Class Image{ private $img; public $width = 85; pub

随机推荐