php Captcha驗證碼類

來源:互聯網
上載者:User
<?php  /** Captcha 驗證碼類 *   Date:   2011-02-19 *   Author: fdipzone */      class Captcha{  //class start            private $sname = '';            public function __construct($sname=''){ // $sname captcha session name          $this->sname = $sname==''? 'm_captcha' : $sname;      }                  /** 產生驗證碼圖片     * @param  int   $length 驗證碼長度     * @param  Array $param  參數     * @return IMG     */    public function create($length=4,$param=array()){          Header("Content-type: image/PNG");          $authnum = $this->random($length);   //產生驗證碼字元.                    $width  = isset($param['width'])? $param['width'] : 13;     //文字寬度          $height = isset($param['height'])? $param['height'] : 18;   //文字高度          $pnum   = isset($param['pnum'])? $param['pnum'] : 100;      //幹擾象素個數          $lnum   = isset($param['lnum'])? $param['lnum'] : 2;        //幹擾線條數                $this->captcha_session($this->sname,$authnum);                //將隨機數寫入session                $pw = $width*$length+10;          $ph = $height+6;                                $im = imagecreate($pw,$ph);                     //imagecreate() 建立映像,大小為 x_size 和 y_size 的空白映像。          $black = ImageColorAllocate($im, 238,238,238);  //設定背景顏色                    $values = array(                  mt_rand(0,$pw),  mt_rand(0,$ph),                  mt_rand(0,$pw),  mt_rand(0,$ph),                  mt_rand(0,$pw),  mt_rand(0,$ph),                  mt_rand(0,$pw),  mt_rand(0,$ph),                  mt_rand(0,$pw),  mt_rand(0,$ph),                  mt_rand(0,$pw),  mt_rand(0,$ph)          );          imagefilledpolygon($im, $values, 6, ImageColorAllocate($im, mt_rand(170,255),mt_rand(200,255),mt_rand(210,255)));   //設置幹擾多邊形底圖                    /* 文字 */        for ($i = 0; $i < strlen($authnum); $i++){              $font = ImageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));//設定文字顏色              $x  = $i/$length * $pw + rand(1, 6);    //設定隨機X座標              $y  = rand(1, $ph/3);                   //設定隨機Y座標              imagestring($im, mt_rand(4,6), $x, $y, substr($authnum,$i,1), $font);           }                /* 加入幹擾象素 */        for($i=0; $i<$pnum; $i++){              $dist = ImageColorAllocate($im, mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //設定雜點顏色              imagesetpixel($im, mt_rand(0,$pw) , mt_rand(0,$ph) , $dist);           }                 /* 加入幹擾線 */        for($i=0; $i<$lnum; $i++){              $dist = ImageColorAllocate($im, mt_rand(50,255),mt_rand(150,255),mt_rand(200,255)); //設置線顏色              imageline($im,mt_rand(0,$pw),mt_rand(0,$ph),mt_rand(0,$pw),mt_rand(0,$ph),$dist);          }                ImagePNG($im);      //以 PNG 格式將映像輸出到瀏覽器或檔案          ImageDestroy($im);  //銷毀一映像      }                  /** 檢查驗證碼     * @param String $captcha    驗證碼* 查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/PHP/     * @param int    $flag       驗證成功後 0:不清除session 1:清除session     * @return boolean     */      public function check($captcha,$flag=1){          if(empty($captcha)){              return false;          }else{              if(strtoupper($captcha)==$this->captcha_session($this->sname)){   //檢測驗證碼                  if($flag==1){                      $this->captcha_session($this->sname,'');                  }                  return true;              }else{                  return false;              }          }      }                      /* 產生隨機數函數     * @param    int     $length 需要隨機產生的字串數     * @return   String     */    private function random($length){          $hash = '';          $chars = 'ABCDEFGHIJKLMNPQRSTUVWXYZ23456789';          $max = strlen($chars) - 1;          for($i = 0; $i < $length; $i++) {              $hash .= $chars[mt_rand(0, $max)];          }          return $hash;      }                  /** 驗證碼session處理方法     * @param    String  $name   captcha session name     * @param    String  $value     * @return   String     */    private function captcha_session($name,$value=null){          if(isset($value)){              if($value!==''){                  $_SESSION[$name] = $value;              }else{                  unset($_SESSION[$name]);              }          }else{              return isset($_SESSION[$name])? $_SESSION[$name] : '';          }      }        }   // class end  ?>

demo

<?      session_start();      require_once('Captcha.class.php');            $obj = new Captcha($sname);     # 創建Captcha類對象                                      # $sname為儲存captcha的session name,可留空,留空則為'm_captcha'          $obj->create($length,$param);    # 創建Captcha並輸出圖片                                      # $length為Captcha長度,可留空,默認為4                                      /* $param = array(                                             'width' => 13        captcha 字元寬度                                             'height' => 18       captcha 字元高度                                             'pnum' => 100        幹擾點個數                                             'lnum' => 2          幹擾線條數                                             )                                             可留空                                     */          $obj->check($captcha,$flag); # 檢查用戶輸入的驗證碼是否正確,true or false                                      # $captcha為用戶輸入的驗證碼,必填                                      # $flag 可留空,默認為1                                       #       1:當驗證成功後自動清除captcha session                                      #       0:當驗證成功後不清除captcha session,用於ajax檢查  ?>

作者:csdn部落格 傲雪星楓

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.