91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在PHP中利用session與gd庫實現一個驗證碼生成功能

發布時間:2020-12-23 15:25:14 來源:億速云 閱讀:158 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關如何在PHP中利用session與gd庫實現一個驗證碼生成功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

驗證碼是為了防止機器灌水給網站帶來污染以及增加服務器負擔而出現的。目前大大小小的網站都有驗證碼。今天自己實現了一個簡單的驗證碼類。說簡單是因為沒有加一些干擾的弧線等等,只是將文字旋轉了一下。當然,因為字體的原因,要想一眼看出來并不容易。同時,為了避免字母的大小寫與數字混淆,又去掉了那些看起來很像的字母數字。
類:

<?php
/**
 *簡單生成驗證碼類
 */
class Captcha {
  private $width;//驗證碼寬度
  private $height;//驗證碼高度
  private $countOfChars;//字符數
  //private $distrubLines;//干擾線條數
  private $chars;//隨機生成的字符串

  public function __construct($width=100,$height=30,$countOfChars=4,$distrubLines=2) {
  //初始化參數
  $this->width=$width;
  $this->height=$height;
  $this->countOfChars=$countOfChars;
  session_start();
  }

  /**
   * 執行全部動作,生成驗證碼并直接輸出
   */
  public function execute(){
  $imageHandle=$this->createImage();
  $this->createChars();
  $this->drawChars($imageHandle);
  $this->outImage($imageHandle);
  }

  /**
   * 創建畫布,并隨機填充顏色
   * @return 返回畫布句柄
   */
  public function createImage(){
  $imageHandle= imagecreate($this->width, $this->height);
  //隨機背景顏色
    $randColor=imagecolorallocate($imageHandle, 50, mt_rand(0, 50), mt_rand(0, 50));
  imagefill($imageHandle, 0, 0, $randColor);
  return $imageHandle;
  }

  /**
   * 生成隨機字符
   */
  private function createChars(){
  //候選字符
  $str='ABCDEFGHJKLMNPQRSTUVWXZabcdefghijkmnpqtuvwx2346789';
  $chars='';
  for($i=0;$i<$this->countOfChars;$i++){
    $chars.=$str[mt_rand(0,strlen($str)-1)];
  }
  $this->chars=$chars;
  //保存在會話中
  $_SESSION['captcha']=strtolower($chars);
  }

  /**
   * 將字符寫入圖像
   * @param type $imageHandle 圖像句柄
   */
  private function drawChars($imageHandle){
  if($this->chars!=null){
    $font='/home/WWW/YuWeiLiShuFT.ttf';
    for($i=0;$i<strlen($this->chars);$i++){
    $color= imagecolorallocate($imageHandle,mt_rand(50, 200),mt_rand(100, 255),255);
    imagefttext($imageHandle,30, 30,$i*20+10,25,$color,$font,$this->chars[$i]);
    }
  }
  }

  /**
   * 輸出圖像
   * @param type $imageHandle 圖像句柄
   */
  private function outImage($imageHandle){
  imagepng($imageHandle);
  imagedestroy($imageHandle);
  }

  /**
   * 判斷用戶輸入的驗證碼是否正確
   * @param type $usrInput 用戶的輸入
   * @return boolean 驗證碼是否匹配
   */
  public static function isRight($usrInput){
  if(isset($_SESSION['captcha'])){
    if(strtolower($usrInput)==$_SESSION['captcha']){
    $_SESSION['captcha']=null;
    return true;
    }else{
    $_SESSION['captcha']=null;
    return false;
    }
  }
  }
}

把驗證設置成了靜態方法,因為生成驗證碼后已經把驗證碼存到了session中,驗證時直接調用靜態方法,而不需要實例化這個類了。

上面的字體可以隨意設置。

下面的代碼講返回一個圖像,實例化Captcha類后動態生成的一個圖像。(outCaptcha.php)

<?php

require('Captcha.php');
$code= new Captcha();
header('Content-Type:image/png');
$code->execute();

header(‘Content-Type:image/png');

這句話的作用是告訴瀏覽器輸出的是png圖像,而不是html代碼。瀏覽器收到后就將下面的輸出解析成圖像。

然后寫一個html靜態頁面(testCaptcha.html),創建表單

<!DOCTYPE html>
<html>
  <head>
    <title>驗證碼測試</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <h2>請輸入驗證碼:</h2>
    <img src="outCaptcha.php"/>
    <form method="POST" action="prove.php">
      <input type="text" name="input_captcha"/>
      <button name="submit">確定</button>
    </form>
  </body>
</html>

僅僅是這樣是不夠的,看到表單提交的地址了么?那個就是用來驗證驗證碼是否輸入正確的代碼:

session_start();
$inputCaptcha= trim($_POST['input_captcha']);
require('Captcha.php');
if(Captcha::isRight($inputCaptcha)){
  echo '驗證碼正確';
}else{
  echo '驗證碼錯誤或已過期';
}
session_destroy();

關于如何在PHP中利用session與gd庫實現一個驗證碼生成功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英德市| 无锡市| 小金县| 青川县| 溆浦县| 福安市| 普格县| 赣州市| 蒙自县| 临颍县| 汕尾市| 平山县| 炎陵县| 罗江县| 平谷区| 来安县| 韶关市| 新营市| 涟水县| 台前县| 宝丰县| 栾川县| 灵川县| 习水县| 错那县| 南川市| 惠东县| 大洼县| 元氏县| 常德市| 行唐县| 龙州县| 中阳县| 龙门县| 哈密市| 沂源县| 宁强县| 平陆县| 许昌县| 雅江县| 玛曲县|