最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php實現(xiàn)的Captcha驗證碼類實例

 更新時間:2014年09月22日 14:50:37   投稿:shichen2014  
這篇文章主要介紹了php實現(xiàn)的Captcha驗證碼類,實例展示了一個驗證碼類程序并附有用法演示實例,有著非常好的參考借鑒價值,需要的朋友可以參考下

本文實例講述了php實現(xiàn)的Captcha驗證碼類,在php程序設(shè)計中有著極其廣泛的應(yīng)用。分享給大家供大家參考。具體方法如下:

驗證碼類文件如下:

<?php
/** Captcha 驗證碼類
* Date: 2011-02-19
* Author: fdipzone
*/

class Captcha{ //class start

 private $sname = '';

 public function __construct($sname=''){ // $sname captcha session name
 $this->sname = $sname==''? 'm_captcha' : $sname;
 }

 /** 生成驗證碼圖片
 * @param int $length 驗證碼長度
 * @param Array $param 參數(shù)
 * @return IMG
 */
 public function create($length=4,$param=array()){
 Header("Content-type: image/PNG");
 $authnum = $this->random($length); //生成驗證碼字符.
 
 $width = isset($param['width'])? $param['width'] : 13; //文字寬度
 $height = isset($param['height'])? $param['height'] : 18; //文字高度
 $pnum = isset($param['pnum'])? $param['pnum'] : 100; //干擾象素個數(shù)
 $lnum = isset($param['lnum'])? $param['lnum'] : 2; //干擾線條數(shù)

 $this->captcha_session($this->sname,$authnum);  //將隨機數(shù)寫入session

 $pw = $width*$length+10;
 $ph = $height+6;
  
 $im = imagecreate($pw,$ph);   //imagecreate() 新建圖像,大小為 x_size 和 y_size 的空白圖像。
 $black = ImageColorAllocate($im, 238,238,238); //設(shè)置背景顏色
 
 $values = array(
  mt_rand(0,$pw), mt_rand(0,$ph),
  mt_rand(0,$pw), mt_rand(0,$ph),
  mt_rand(0,$pw), mt_rand(0,$ph),
  mt_rand(0,$pw), mt_rand(0,$ph),
  mt_rand(0,$pw), mt_rand(0,$ph),
  mt_rand(0,$pw), mt_rand(0,$ph)
 );
 imagefilledpolygon($im, $values, 6, ImageColorAllocate($im, mt_rand(170,255),mt_rand(200,255),mt_rand(210,255))); //設(shè)置干擾多邊形底圖
 
 /* 文字 */
 for ($i = 0; $i < strlen($authnum); $i++){
  $font = ImageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));//設(shè)置文字顏色
  $x = $i/$length * $pw + rand(1, 6); //設(shè)置隨機X坐標
  $y = rand(1, $ph/3);   //設(shè)置隨機Y坐標
  imagestring($im, mt_rand(4,6), $x, $y, substr($authnum,$i,1), $font); 
 }

 /* 加入干擾象素 */
 for($i=0; $i<$pnum; $i++){
  $dist = ImageColorAllocate($im, mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //設(shè)置雜點顏色
  imagesetpixel($im, mt_rand(0,$pw) , mt_rand(0,$ph) , $dist); 
 } 

 /* 加入干擾線 */
 for($i=0; $i<$lnum; $i++){
  $dist = ImageColorAllocate($im, mt_rand(50,255),mt_rand(150,255),mt_rand(200,255)); //設(shè)置線顏色
  imageline($im,mt_rand(0,$pw),mt_rand(0,$ph),mt_rand(0,$pw),mt_rand(0,$ph),$dist);
 }

 ImagePNG($im); //以 PNG 格式將圖像輸出到瀏覽器或文件
 ImageDestroy($im); //銷毀一圖像
 }

 /** 檢查驗證碼
 * @param String $captcha 驗證碼
 * @param int $flag 驗證成功后 0:不清除session 1:清除session
 * @return boolean
 */ 
 public function check($captcha,$flag=1){
 if(empty($captcha)){
  return false;
 }else{
  if(strtoupper($captcha)==$this->captcha_session($this->sname)){ //檢測驗證碼
  if($flag==1){
   $this->captcha_session($this->sname,'');
  }
  return true;
  }else{
  return false;
  }
 }
 }

 /* 產(chǎn)生隨機數(shù)函數(shù)
 * @param int $length 需要隨機生成的字符串數(shù)
 * @return String
 */
 private function random($length){
 $hash = '';
 $chars = 'ABCDEFGHIJKLMNPQRSTUVWXYZ23456789';
 $max = strlen($chars) - 1;
 for($i = 0; $i < $length; $i++) {
  $hash .= $chars[mt_rand(0, $max)];
 }
 return $hash;
 }

 /** 驗證碼session處理方法
 * @param String $name captcha session name
 * @param String $value
 * @return String
 */
 private function captcha_session($name,$value=null){
 if(isset($value)){
  if($value!==''){
  $_SESSION[$name] = $value;
  }else{
  unset($_SESSION[$name]);
  }
 }else{
  return isset($_SESSION[$name])? $_SESSION[$name] : '';
 }
 }
} // class end
?>

demo示例程序如下:

<?php 
  session_start(); 
  require_once('Captcha.class.php'); 
 
  $obj = new Captcha($sname);   # 創(chuàng)建Captcha類對象 
                  # $sname為保存captcha的session name,可留空,留空則為'm_captcha' 
 
  $obj->create($length,$param);  #創(chuàng)建Captcha并輸出圖片 
                  # $length為Captcha長度,可留空,默認為4 
                  /* $param = array( 
                      'width' => 13    captcha 字符寬度 
                      'height' => 18    captcha 字符高度 
                      'pnum' => 100    干擾點個數(shù)
                      'lnum' => 2     干擾線條數(shù) 
                      ) 
                      可留空 
                  */ 
  $obj->check($captcha,$flag); # 檢查用戶輸入的驗證碼是否正確,true or false 
                  # $captcha為用戶輸入的驗證碼,必填 
                  # $flag 可留空,默認為1  
                  #    1:當驗證成功后自動清除captcha session 
                  #    0:擋驗證成功后不清除captcha session,用于ajax檢查 
?>

相信本文所述對大家php程序設(shè)計的學習有一定的借鑒價值。

相關(guān)文章

  • PHP 設(shè)計模式之觀察者模式介紹

    PHP 設(shè)計模式之觀察者模式介紹

    觀察者模式定義對象的一對多依賴,這樣一來,當一個對象改變狀態(tài)時,它的所有依賴者都會收到通知并自動更新!
    2012-02-02
  • php JWT在web端中的使用方法教程

    php JWT在web端中的使用方法教程

    這篇文章主要給大家介紹了關(guān)于php JWT在web端中的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • 淺析php與數(shù)據(jù)庫代碼開發(fā)規(guī)范

    淺析php與數(shù)據(jù)庫代碼開發(fā)規(guī)范

    以下是對php與數(shù)據(jù)庫代碼開發(fā)規(guī)范進行了簡單的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • PHP頁面靜態(tài)化的優(yōu)缺點與實現(xiàn)

    PHP頁面靜態(tài)化的優(yōu)缺點與實現(xiàn)

    眾所周知,頁面靜態(tài)化是門戶網(wǎng)站研發(fā)中必備的一項技能,本課程從純靜態(tài)化和偽靜態(tài)化兩個角度進行分析,帶領(lǐng)大家掌握在PHP中如何生成純靜態(tài)化頁面,在WEB服務(wù)器中如何配置偽靜態(tài),幫助大家掌握又一項加薪利器
    2023-02-02
  • 詳解PHP安裝mysql.so擴展的方法

    詳解PHP安裝mysql.so擴展的方法

    平常我們都是先安裝mysql,然后才能去安裝php。假如先安裝php,后安裝mysql,由于php需要連接mysql,因而在php引擎中需要配置使用mysql.so擴展。下面這篇文章主要介紹了PHP安裝mysql.so擴展的方法,需要的朋友可以參考下
    2016-12-12
  • php使用PDO執(zhí)行SQL語句的方法分析

    php使用PDO執(zhí)行SQL語句的方法分析

    這篇文章主要介紹了php使用PDO執(zhí)行SQL語句的方法,結(jié)合實例形式分析了PDO常用SQL函數(shù)功能及使用技巧,需要的朋友可以參考下
    2017-02-02
  • php調(diào)用Google translate_tts api實現(xiàn)代碼

    php調(diào)用Google translate_tts api實現(xiàn)代碼

    以下是對php調(diào)用Google translate_tts api的實現(xiàn)代碼進行了分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • PHP實現(xiàn)帶重試功能的curl連接示例

    PHP實現(xiàn)帶重試功能的curl連接示例

    這篇文章主要介紹了PHP實現(xiàn)帶重試功能的curl連接方法,結(jié)合實例形式分析了php使用curl實現(xiàn)重復連接的方法,需要的朋友可以參考下
    2016-07-07
  • php兩種基本的輸出方及實例詳解

    php兩種基本的輸出方及實例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于php兩種基本的輸出方及實例詳解內(nèi)容,有需要的朋友們可以跟著學習參考下。
    2021-11-11
  • 通過PHP的內(nèi)置函數(shù),通過DES算法對數(shù)據(jù)加密和解密

    通過PHP的內(nèi)置函數(shù),通過DES算法對數(shù)據(jù)加密和解密

    數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為密文,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來內(nèi)容,通過這樣的途徑來達到保護數(shù)據(jù)不被非法人竊取、閱讀的目的
    2012-06-06

最新評論

凤庆县| 安庆市| 普兰店市| 黔江区| 汶上县| 巴南区| 澳门| 正宁县| 广东省| 祥云县| 左贡县| 锦州市| 玛多县| 本溪| 阳江市| 崇信县| 东乌珠穆沁旗| 保山市| 宝坻区| 辽阳县| 张掖市| 开化县| 巴林右旗| 密云县| 舞阳县| 全椒县| 青海省| 家居| 新乐市| 渑池县| 龙胜| 灌南县| 襄垣县| 项城市| 思茅市| 五大连池市| 嵩明县| 四子王旗| 万州区| 金乡县| 天镇县|