久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

php封裝的驗(yàn)證碼類分享

本文給大家分享的是一個(gè)php封裝的驗(yàn)證碼類的代碼和原理及思路,非常的清晰詳細(xì),有需要的小伙伴可以參考下

驗(yàn)證碼是我們開發(fā)的時(shí)候經(jīng)常用到的功能,所以在此本人包裝了一個(gè)驗(yàn)證碼類,應(yīng)該可以作為php的類插件用,在此分享給各位讀友。

  實(shí)現(xiàn)的原理也是很簡(jiǎn)單,就是利用畫布的幾個(gè)函數(shù),再加上一些字符串的獲取,東湊西湊就構(gòu)成了,呵呵。

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

  首先是關(guān)于一些函數(shù)的解釋,這里的解釋純屬個(gè)人體會(huì),有什么錯(cuò)誤的地方,還請(qǐng)讀者指正。

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

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

    w 畫布的寬

    h 畫布的高

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

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

    說明:

    img畫布資源

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

  3、為畫布添加背景色

    imagefill(img,x,y,color);

    說明:

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

  4、畫邊框

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

    說明:

    其左上角坐標(biāo)為 x1, y1,右下角坐標(biāo)為 x2, y2。圖像的左上角坐標(biāo)為 0, 0。

  3、繪制內(nèi)容(字符)

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

    說明:

    img畫布

    size是字大小 1至5

    x,y是起始點(diǎn)

    string是所要畫的內(nèi)容

    color是顏色

  4、告訴瀏覽器圖片格式

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

  5、輸出(或保存),也可以使用第2個(gè)參數(shù)實(shí)現(xiàn)保存

    imagepng(img【,filename】)

    imagejpeg(img【,filename】)

    imagegif(img【,filename】)

  6、添加干擾線,本質(zhì)就是直線

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

    說明:

      img 畫布

      x1,y1 起點(diǎn)

      x2,y2 終點(diǎn)

      color 顏色

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

      說明:

        img 畫布

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

        angle 角度

        x,y 坐標(biāo)點(diǎn)

        color 顏色

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

        text 內(nèi)容

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

  下面是思路:

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

  下面是代碼:

<?php
namespace captcha;
/*
*驗(yàn)證碼類
*verify方法生成驗(yàn)證碼字符串
*entry方法生成驗(yàn)證碼
*特別提醒:這里要先用entry生成驗(yàn)證碼,再用verify生成驗(yàn)證碼的字符串,也就是必須先調(diào)用entry,然后才能夠調(diào)用verify生成驗(yàn)證碼的字符串,原因代碼已經(jīng)說明問題了,因?yàn)轵?yàn)證碼的字符串是在entry方法調(diào)用captchaImage生成的,所以必須先調(diào)用它才行
*有的地方對(duì)中文的字體要求比較高,所以,有的地方不支持中文驗(yàn)證碼
*/
class Captcha{
  //配置參數(shù)
  private $config = array();
  //驗(yàn)證碼
  private $verifyCode = '';
  //獲取配置文件的配置信息,給類傳參數(shù)就行,例如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'=>'來到新機(jī)場(chǎng)主航站樓建設(shè)在婚姻關(guān)系存續(xù)期間所負(fù)債務(wù)她在收到要求她償還前夫在婚姻關(guān)系存續(xù)期間所欠債務(wù)的法院傳票后要精益求精善始善終')){
    $this->config = $config;
  }
  //創(chuàng)建驗(yàn)證碼
  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);
    }
    //存在則添加干擾點(diǎn)
    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){
    //添加噪點(diǎn)
    for($i=0;$i<$this->config['dots'];$i++){
      //噪點(diǎn)顏色
      $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]));
  }
  /*生成驗(yàn)證碼,默認(rèn)英文,$ch為true則為中文*/
  private function code($img,$ch=false,$set=''){
    $str = "";
    //計(jì)算間隔
    $span = ceil($this->config['width']/($this->config['length']+1));
    if($ch && !empty($set)){
      //隨機(jī)產(chǎn)生字符
      $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);
      }
      //每次繪制一個(gè)字符
      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{
      //隨機(jī)生成字母或者數(shù)字
      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));
        }
      }
      //每次繪制一個(gè)字符
      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;
  }
  //獲取驗(yàn)證碼
  public function verify(){
    return $this->verifyCode;
  }
  //生成驗(yàn)證碼
  public function entry(){
    header("content-type:image/png");
    imagepng($this->captchaImage());
  }
}
$ob = new Captcha;
$ob->entry();

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡(jiǎn)單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對(duì)有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對(duì)比分析了php針對(duì)多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 久久国产精品免费一区二区三区 | 国产大片一区 | 国产男女猛烈无遮掩视频免费网站 | 亚洲精品片 | 国产一区二区日韩 | 精品久久网 | 日本一区二区高清视频 | 国产专区在线 | 99re视频 | 午夜电影网站 | 精品成人一区 | japanhd成人| 欧美高清视频一区 | 久久国产亚洲 | 视频三区| 黄色片av | 日本网站在线看 | 自拍偷拍亚洲一区 | 亚洲午夜精品一区二区三区他趣 | 精品三级在线观看 | 久久免费视频1 | 超碰美女在线 | 久久久av| 夜夜草导航| 天天操天天射天天舔 | 狠狠入ady亚洲精品经典电影 | 成人免费一区二区 | www日本高清 | 麻豆毛片| 欧美精品乱码久久久久久按摩 | 中文字幕亚洲精品 | 射欧美 | 成人免费三级电影 | 成人一级片在线观看 | 国产精品一区二区在线 | 国产成人综合久久 | 久久国产精品一区二区三区 | 亚洲午夜视频 | 欧美在线视频一区 | 91视频导航 | 国产激情视频在线免费观看 |