国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php封裝的驗證碼類分享

2024-05-04 23:55:28
字體:
來源:轉載
供稿:網友

驗證碼是我們開發(fā)的時候經常用到的功能,所以在此本人包裝了一個php/18495.html">驗證碼類,應該可以作為php的類插件用,在此分享給各位讀友。

  實現的原理也是很簡單,就是利用畫布的幾個函數,再加上一些字符串的獲取,東湊西湊就構成了,呵呵。

  這里大概寫一下思路吧,其實這個類已經注釋的非常清楚了,不過,個人還是在行文前啰嗦一下。

  首先是關于一些函數的解釋,這里的解釋純屬個人體會,有什么錯誤的地方,還請讀者指正。

  1、創(chuàng)建畫布函數:imagecreatetruecolor(w,h);

    說明:用于創(chuàng)建一個畫布。

    w 畫布的寬

    h 畫布的高

    此函數的返回值資源類(gd)

  2、為畫布創(chuàng)建一種顏色:imagecolorallocate(img,red,green,blue)

    說明:

    img畫布資源

    red,green,blue  是0~255的范圍

  3、為畫布添加背景色

    imagefill(img,x,y,color);

    說明:

    在 image 圖像的坐標 x,y(圖像左上角為 0, 0)

  4、畫邊框

    imagerectangle($img,x1,y1,x2,y2,color);

    說明:

    其左上角坐標為 x1, y1,右下角坐標為 x2, y2。圖像的左上角坐標為 0, 0。

  3、繪制內容(字符)

    imagestring(img ,size,x,y,string,color);

    說明:

    img畫布

    size是字大小 1至5

    x,y是起始點

    string是所要畫的內容

    color是顏色

  4、告訴瀏覽器圖片格式

    header("Content-type:image/png");可為image/gif等等

  5、輸出(或保存),也可以使用第2個參數實現保存

    imagepng(img【,filename】)

    imagejpeg(img【,filename】)

    imagegif(img【,filename】)

  6、添加干擾線,本質就是直線

    imageline(img,x1,y1,x2,y2,color);

    說明:

      img 畫布

      x1,y1 起點

      x2,y2 終點

      color 顏色

  7、imagettftext ( img,size, angle, x, y, color, fontfile,text )

      說明:

        img 畫布

        size 字體大小,缺省單位像素

        angle 角度

        x,y 坐標點

        color 顏色

        fontfile 字體文件,必須是中文字體

        text 內容

  特別說明:這里的color參數都是imagecolorallocate()函數創(chuàng)建的顏色

  下面是思路:

  這里最先生成畫布,之后就是為畫布添加字符串,直線,噪點,邊框,來生成驗證碼的,最后類返回的兩個公用接口是:可供外面調用的生成驗證碼的畫布和驗證碼的字符串構成,為的是給外界輸出驗證碼畫布,以及存儲字符串,作為驗證用

  下面是代碼:

<?phpnamespace captcha;/**驗證碼類*verify方法生成驗證碼字符串*entry方法生成驗證碼*特別提醒:這里要先用entry生成驗證碼,再用verify生成驗證碼的字符串,也就是必須先調用entry,然后才能夠調用verify生成驗證碼的字符串,原因代碼已經說明問題了,因為驗證碼的字符串是在entry方法調用captchaImage生成的,所以必須先調用它才行*有的地方對中文的字體要求比較高,所以,有的地方不支持中文驗證碼*/class Captcha{  //配置參數  private $config = array();  //驗證碼  private $verifyCode = '';  //獲取配置文件的配置信息,給類傳參數就行,例如new Captcha($config);$config是你的配置文件信息  public function __construct($config=array('width'=>100,'height'=>40,'length'=>4,'size'=>7,'lines'=>0,'dots'=>0,'font'=>'simfang.ttf','rectangle'=>array(255,55,122),'charset'=>true,'chinese'=>'來到新機場主航站樓建設在婚姻關系存續(xù)期間所負債務她在收到要求她償還前夫在婚姻關系存續(xù)期間所欠債務的法院傳票后要精益求精善始善終')){    $this->config = $config;  }  //創(chuàng)建驗證碼  private function captchaImage(){    //畫布    $img = imagecreatetruecolor($this->config['width'],$this->config['height']);    //填充畫布顏色    imagefill($img,0,0,imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)));    //需要邊框則畫邊框    if($this->config['rectangle'] && is_array($this->config['rectangle']) && count($this->config['rectangle']) == 3){      $this->tangle($img);    }    $this->verifyCode = $this->code($img,$this->config['charset'],$this->config['chinese']);    //存在則添加干擾線    if($this->config['lines']){      $this->codeLines($img);    }    //存在則添加干擾點    if($this->config['dots']){      $this->codeDots($img);    }    return $img;  }  private function codeLines($img){    //繪制干擾線    for($i=0;$i<$this->config['lines'];$i++){      imageline($img,mt_rand(0,$this->config['width'] / 10),mt_rand(0,$this->config['height']),mt_rand($this->config['width'] * 7/ 10,$this->config['width'] * 9/ 10),mt_rand(0,$this->config['height']),imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));    }  }  private function codeDots($img){    //添加噪點    for($i=0;$i<$this->config['dots'];$i++){      //噪點顏色      $color = imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180));      imagestring($img,mt_rand(1,3),mt_rand(0,170),mt_rand(0,30),'*',$color);        }  }  /*畫布邊框*/  private function tangle($img){    imagerectangle($img,0,0,$this->config['width']-1,$this->config['height']-1,imagecolorallocate($img,$this->config['rectangle'][0],$this->config['rectangle'][1],$this->config['rectangle'][2]));  }  /*生成驗證碼,默認英文,$ch為true則為中文*/  private function code($img,$ch=false,$set=''){    $str = "";    //計算間隔    $span = ceil($this->config['width']/($this->config['length']+1));    if($ch && !empty($set)){      //隨機產生字符      $set = $this->config['chinese'];      for($i=0;$i<$this->config['length'];$i++){        $end = strlen($set)/3;        $pos = mt_rand(0,$end-1);        $str .= substr($set,$pos*3,3);      }      //每次繪制一個字符      for($i=1;$i<=$this->config['length'];$i++){        imagettftext($img,16,mt_rand(-30,60),$i*$span,$this->config['height']*3/5,imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)),$this->config['font'],substr($str,($i-1)*3,3));      }    }else{      //隨機生成字母或者數字      for($i=0;$i<$this->config['length'];$i++){        switch(mt_rand(0,2)){          case 0:          $str .= chr(mt_rand(65,90));          break;        case 1:          $str .= chr(mt_rand(97,122));          break;        case 2:          $str .= chr(mt_rand(48,57));        }      }      //每次繪制一個字符      for($i=1;$i<=$this->config['length'];$i++){        imagestring($img,$this->config['size'],$i*$span,0,$str[$i-1],imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)));      }    }    return $str;  }  //獲取驗證碼  public function verify(){    return $this->verifyCode;  }  //生成驗證碼  public function entry(){    header("content-type:image/png");    imagepng($this->captchaImage());  }}$ob = new Captcha;$ob->entry();

最后,為了不誤人子弟,還是再強調一遍:
這里必須先用entry生成驗證碼,再用verify生成驗證碼的字符串,也就是必須先調用entry,然后才能夠調用verify生成驗證碼的字符串,原因代碼已經說明問題了,因為驗證碼的字符串是在entry方法的方法captchaImage中生成的,所以必須先調用它才行 有的地方對中文的字體要求比較高,所以,有的地方不支持中文驗證碼


注:相關教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 凤山县| 宣城市| 获嘉县| 漳州市| 龙海市| 眉山市| 安化县| 乐东| 康马县| 牡丹江市| 临沭县| 个旧市| 安平县| 体育| 湟中县| 封丘县| 巴林右旗| 郓城县| 宁夏| 吴江市| 遵化市| 平阴县| 镇平县| 湟源县| 东乌珠穆沁旗| 营山县| 禄丰县| 大洼县| 湖南省| 祁阳县| 简阳市| 平潭县| 垦利县| 阜城县| 龙里县| 隆回县| 尉氏县| 龙陵县| 九寨沟县| 长垣县| 剑阁县|