php 驗證碼類


<?php
  class Vcode {
   private $width ; //寬
   private $height ; //高
   private $num //數量
   private $code ; //驗證碼
   private $img //圖像的資源
  
   //構造方法, 三個參數
   function __construct( $width =80, $height =20, $num =4) {
    $this ->width = $width ;
    $this ->height = $height ;
    $this ->num = $num ;
    $this ->code = $this ->createcode(); //調用自己的方法
   }
  
   //獲取字符的驗證碼, 用於保存在服務器中
   function getcode() {
    return $this ->code;
   }
  
   //輸出圖像
   function outimg() {
    //創建背景 (顏色, 大小, 邊框)
    $this ->createback();
  
    //畫字 (大小, 字體顏色)
    $this ->outstring();
  
    //干擾元素(點, 線條)
  
    $this ->setdisturbcolor();
    //輸出圖像
    $this ->printimg();
   }
  
   //創建背景
   private function createback() {
    //創建資源
    $this ->img = imagecreatetruecolor( $this ->width, $this ->height);
    //設置隨機的背景顏色
    $bgcolor = imagecolorallocate( $this ->img, rand(225, 255), rand(225, 255), rand(225, 255));
    //設置背景填充
    imagefill( $this ->img, 0, 0, $bgcolor );
    //畫邊框
    $bordercolor = imagecolorallocate( $this ->img, 0, 0, 0);
  
     imagerectangle( $this ->img, 0, 0, $this ->width-1, $this ->height-1, $bordercolor );
   }
  
   //畫字
   private function outstring() {
    for ( $i =0; $i < $this ->num; $i ++) {
  
     $color = imagecolorallocate( $this ->img, rand(0, 128), rand(0, 128), rand(0, 128));
  
     $fontsize =rand(3,5); //字體大小
  
     $x = 3+( $this ->width/ $this ->num)* $i ; //水平位置
     $y = rand(0, imagefontheight( $fontsize )-3);
  
     //畫出每個字符
     imagechar( $this ->img, $fontsize , $x , $y , $this ->code{ $i }, $color );
    }
   }
  
   //設置干擾元素
   private function setdisturbcolor() {
    //加上點數
    for ( $i =0; $i <100; $i ++) {
     $color = imagecolorallocate( $this ->img, rand(0, 255), rand(0, 255), rand(0, 255));
     imagesetpixel( $this ->img, rand(1, $this ->width-2), rand(1, $this ->height-2), $color );
    }
  
    //加線條
    for ( $i =0; $i <10; $i ++) {
     $color = imagecolorallocate( $this ->img, rand(0, 255), rand(0, 128), rand(0, 255));
     imagearc( $this ->img,rand(-10, $this ->width+10), rand(-10, $this ->height+10), rand(30, 300), rand(30, 300), 55,44, $color );
    }
   }
  
   //輸出圖像
   private function printimg() {
    if (imagetypes() & IMG_GIF) {
      header( "Content-type: image/gif" );
      imagegif( $this ->img);
    } elseif (function_exists( "imagejpeg" )) {
      header( "Content-type: image/jpeg" );
      imagegif( $this ->img);
    } elseif (imagetypes() & IMG_PNG) {
      header( "Content-type: image/png" );
      imagegif( $this ->img);
    } else {
      die ( "No image support in this PHP server" );
    }
  
   }
  
   //生成驗證碼字符串
   private function createcode() {
    $codes = "3456789abcdefghijkmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY" ;
  
    $code = "" ;
  
    for ( $i =0; $i < $this ->num; $i ++) {
     $code .= $codes {rand(0, strlen ( $codes )-1)};
    }
  
    return $code ;
   }
  
   //用於自動銷毀圖像資源
   function __destruct() {
    imagedestroy( $this ->img);
   }
  
  }
 
 
 
 
<?php
  //開啟session
  session_start();
  include "vcode.class.php" ;
  //構造方法
  $vcode = new Vcode(80, 30, 4);
  //將驗證碼放到服務器自己的空間保存一份
  $_SESSION [ 'code' ] = $vcode ->getcode();
  //將驗證碼圖片輸出
  $vcode ->outimg();
?>
 
 
 
 
<?php
  session_start();
if (isset( $_POST [ 'dosubmit' ])) {
  if ( strtoupper ( $_SESSION [ 'code' ]) == strtoupper ( $_POST [ 'code' ]) ) {
   echo "輸入成功!<br>" ;
  } else {
   echo "輸入不對!<br>" ;
  }
}
?>
  
<body>
  <form action= "reg.php" method= "post" >
   username: <input type= "text" name= "username" > <br>
   password: <input type= "password" name= "password" > <br>
   code: <input type= "text" onkeyup= "if(this.value!=this.value.toUpperCase()) this.value=this.value.toUpperCase()" size= "6" name= "code" >
     <img src= "code.php" onclick= "this.src='code.php?'+Math.random()" /> <br>
   <input type= "submit" name= "dosubmit" value= "登 錄" > <br>
  </form>
</body>
 
 
壓縮包在文件中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM