1. 程式人生 > >PHP實現的封裝驗證碼類詳解

PHP實現的封裝驗證碼類詳解

用PHP寫一個驗證碼類,並進行封裝。
類名: validationcode.class.php
程式碼如下:
程式碼如下:
<?php
 class ValidationCode {
  private $width;
  private $height;
  private $codeNum;
  private $image;   //影象資源
  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/15);

   if($number > 240-$codeNum){
    $this->disturbColorNum= 240-$codeNum;
   }else{
    $this->disturbColorNum=$number;
   }

  }
  //通過訪問該方法向瀏覽器中輸出影象
  function showImage($fontFace=""){
   //第一步:建立影象背景
   $this->createImage();
   //第二步:設定干擾元素
   $this->setDisturbColor();
   //第三步:向影象中隨機畫出文字
   $this->outputText($fontFace);
   //第四步:輸出影象
   $this->outputImage();
  }

  //通過呼叫該方法獲取隨機建立的驗證碼字串
  function getCheckCode(){
   return $this->checkCode;
  }
  private function createImage(){
   //建立影象資源
   $this->image=imagecreatetruecolor($this->width, $this->height);
   //隨機背景色
   $backColor=imagecolorallocate($this->image, rand(225, 255), rand(225,255), rand(225, 255));
   //為背景添充顏色
   imagefill($this->image, 0, 0, $backColor);
   //設定邊框顏色
   $border=imagecolorallocate($this->image, 0, 0, 0);
   //畫出矩形邊框
   imagerectangle($this->image, 0, 0, $this->width-1, $this->height-1, $border);
  }
  private function  setDisturbColor(){
   for($i=0; $i<$this->disturbColorNum; $i++){
    $color=imagecolorallocate($this->image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($this->image, rand(1, $this->width-2), rand(1, $this->height-2), $color);
   }
   for($i=0; $i<10; $i++){
    $color=imagecolorallocate($this->image, rand(200, 255), rand(200, 255), rand(200, 255));
    imagearc($this->image, rand(-10, $this->width), rand(-10, $this->height), rand(30, 300), rand(20, 200), 55, 44, $color);
   }
  }
  private function createCheckCode(){
//這裡主要產生隨機碼,從2開始是為了區分1和l
   $code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
   $string='';
   for($i=0; $i < $this->codeNum; $i++){
    $char=$code{rand(0, strlen($code)-1)};
    $string.=$char;
   }
   return $string;
  }
  private function outputText($fontFace=""){
   for($i=0; $i<$this->codeNum; $i++){
    $fontcolor=imagecolorallocate($this->image, rand(0, 128), rand(0, 128), rand(0, 128));
    if($fontFace==""){
     $fontsize=rand(3, 5);
     $x=floor($this->width/$this->codeNum)*$i+3;
     $y=rand(0, $this->height-15);
     imagechar($this->image,$fontsize, $x, $y, $this->checkCode{$i},$fontcolor);
    }else{
     $fontsize=rand(12, 16);
     $x=floor(($this->width-8)/$this->codeNum)*$i+8;
     $y=rand($fontSize+5, $this->height);
     imagettftext($this->image,$fontsize,rand(-30, 30),$x,$y ,$fontcolor, $fontFace, $this->checkCode{$i});
    }
   }
  }
  private function outputImage() {
   if(imagetypes() & IMG_GIF){
   
header
("Content-Type:image/gif");
    imagepng($this->image);
   }else if(imagetypes() & IMG_JPG){
    header("Content-Type:image/jpeg");
    imagepng($this->image);
   }else if(imagetypes() & IMG_PNG){
    header("Content-Type:image/png");
    imagepng($this->image);
   }else if(imagetypes() & IMG_WBMP){
    header("Content-Type:image/vnd.wap.wbmp");
    imagepng($this->image);
   }else{
    die("PHP不支援影象建立");
   }
  }
  function __destruct(){
   imagedestroy($this->image);
  }
 }


使用如下:
測試,呼叫驗證碼類
code.php
程式碼如下:
<?php
session_start();
include "validationcode.class.php";
$code=new ValidationCode(80, 20, 4);
$code->showImage();   //輸出到頁面中供 註冊或登入使用
$_SESSION["code"]=$code->getCheckCode();  //將驗證碼儲存到伺服器中

相關推薦

PHP實現封裝驗證

用PHP寫一個驗證碼類,並進行封裝。類名: validationcode.class.php程式碼如下: 程式碼如下: <?php  class ValidationCode {   private $width;   private $height;   private $codeNum;   pri

php實現圖形驗證

最近由於專案需要,圖形驗證碼,就寫了一個,為大家詳細介紹下實現過程! 1、驗證碼封裝實現方法 //生成驗證碼 public function get_img_code(){ ob_clean(); cookie('code',NULL); session('code',NU

實現圖片驗證 PHP

-type cli ont eat edi doc out text src 封裝一個圖片驗證碼類 <?php class Captcha{ private $img; private $imgX; private $imgY; pr

驗證原理與案例

剩下的細節問題還有: 1,驗證碼如何加噪成圖片 2,服務端如何維護驗證碼 案例程式碼在:https://github.com/yejingtao/forblog/tree/master/demo-securityCode 核心程式碼詳解: 前端: <!DOCTYPE html> <ht

PHP實現帶有驗證的登陸註冊

開發工具 Wampserver WampServer就是Windows下 Apache+Mysql+PHP整合安裝環境,即在window下的apache、php和mysql的伺服器軟體,通俗的說,就是它集成了php開發所需要的資料庫軟體,伺

PHP實現簡訊驗證

手機驗證碼流程: 獲取手機驗證碼事件:正則驗證手機號,將手機號碼和驗證碼作為引數非同步訪問手機驗證碼ajax頁面 手機驗證碼ajax頁面:驗證驗證碼,生成手機驗證碼,生成流水號,引用介面頁面傳送驗證碼,如果成功則將驗證碼資訊寫入資料庫 註冊按鈕事件:將手機號和手機驗證

php實現驗證

<?php class  Code{ // 1. 定義各個成員 有寬、高、畫布、字數、型別、畫型別 private  $width ;  //

實現高性能糾刪引擎 | 糾刪技術(下)

糾刪碼引擎 基礎知識 深入優化 技術 工程師 作者介紹: 徐祥曦,七牛雲工程師,獨立開發了多套高性能糾刪碼/再生碼編碼引擎。柳青,華中科技大學博士,研究方向為基於糾刪碼的分布式存儲系統。前言:在上篇《如何選擇糾刪碼編碼引擎》中,我們簡單了解了 Reed-Solomon Codes(RS 碼

建立一個漂亮的PHP驗證文件及調用方式

去掉 -1 cti elephant orm random 上一個 ott 狀態 //驗證碼類class ValidateCode { private $charset = ‘abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ2345678

php文件上傳原理(含源

輸入數據 最大值 cut 產生 har 默認值 接受 上傳文件 tle 1、文件上傳原理   將客戶端的文件上傳到服務器,再將服務器的臨時文件上傳到指定目錄 2、客戶端配置 提交表單 表單的發送方式為post 添加enctype="multipart/form-data"

PHP驗證

abcdefg creat fig tutorial n) getc images wid 驗證碼類 class Captcha{ //驗證碼寬 private $width; //驗證碼高度 private $height; //驗

PHP命名空間與自動加載

命名 ech stat 自動 spl pla 空間 程序設計 php面向對象 本文實例講述了PHP命名空間與自動加載類。分享給大家供大家參考,具體如下:今天我要給大家介紹的是PHP的命名空間 和 自動加載類我先簡單的分開演示 在放在一起大家請看:什麽是自動加載類?想必大家都

簡單實用的PHP驗證

最近在學習php。實現了一個簡單的驗證碼類,僅供參考。記得自己的PHP環境得有GD庫。 先上效果圖:     圖一     圖二   <?php /** * 驗證碼類 */ class Code { // 驗證碼個數 protected $num

php+mysql實現簡訊驗證功能

class Sms { const EXPIRE_SEC = 300; // 過期時間間隔 5分鐘 const RESEND_SEC = 60; // 重發時間間隔 const ONE_DAY_FREQ = 10; // 每日向同一個手機號發簡訊的次數

C++中string(轉載)(最下面有程式碼實現

作者:yzl_rex 來源:CSDN 原文:https://blog.csdn.net/yzl_rex/article/details/7839379 要想使用標準C++中string類,必須要包含 #include < string>// 注意是< string>

利用PHP 簡單實現加減法驗證

<?php header('Content-Type: image/png'); $im = imagecreatetruecolor( 200 , 50 );//生成圖片長寬 // Create some colors $white = imagecolorallocate(

藉助CountDownTimer實現獲取驗證倒計時按鈕

    咱們中國人做事情講究吉利,我也不例外,所以就選今天這個良辰吉日來寫出自己的第一篇部落格文章吧! 一、引言     我們經常在電視中看到發生衛星的場景,大家都知道會有人在喊倒計時“5,4,3,2,1,發射!”,這個時候衛星就點火發射了。其實這些都是已經在程式當中寫好

Scala集合特質繼承體系、定義方法與主要實現

目錄 一. 架構 二. Traversable 三. Iterable 1. Seq 1.1 緩衝器 2. Set 2.1 SortedSet 2.2 Bitset 3. Map 3.1 ListMap 四. 不可變Seq實體類 1. Lis

php生成驗證

php生成驗證碼類   直接看程式碼 <?php session_start(); class Code{ //資源 private $img; //畫布寬度 private $width=100; //畫布高度

PHP檔案上傳操作例項(包含上傳檔案型別MIME驗證)

本文例項分析了PHP檔案上傳操作。分享給大家供大家參考,具體如下: 檔案上傳 發生在瀏覽器向伺服器發出的請求中。 檔案,對於瀏覽器來講,就是表單中的一個特殊型別的資料而已。 瀏覽器表單中的資料,兩種型別: 字串型別(位元組流編碼) 檔案型別(二進位制編碼),檔案是表單資料中