php實現驗證碼的步驟以及服務端校正的代碼

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於php實現驗證碼的步驟以及服務端校正的代碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

驗證碼是什麼:驗證碼是一種區分使用者是電腦還是人的公用程式

製作驗證碼需要四步

1:產生底圖

2:產生驗證內容

3:產生驗證碼內容

4:校正驗證內容

先分步,第一步,產生底圖:

目標:通過php產生一張100*30大小的圖片

方法:imagecreatetruecolor($width,$height);

注意事項:依賴GD擴充

在輸出圖片前,必須提前輸出那張圖片的header 資訊 --》》發送原生http頭

該方法預設輸出黑色背景

imagecreatetruecolor() 建立一個真彩色映像 用$image來表示,之後,會大量用到

既然是建立真彩映像,那就要有多樣的顏色 ,下面imagecolorallocate(選畫布,三色參數)

要用什麼意思填充 imagefill(選畫布,開始位置 ,顏色)

致此,產生了底圖,下面開始加點作料

$image = imagecreatetruecolor(100,30)

$bgcolor = imagecolorallocate($image,255,255,255);

imagefill($image,0,0,$bgcolor)

第二步:產生驗證內容

目標:隨機產生數字(大小,開始位置,內容,顏色)

方法:通過迴圈,imagestring 函數 ,水平的產生一行字串(根據imagestring裡面參數位置,往進填)

注意事項:控制好字型大小,N/n

for($i=0;$<4;i++){

此處根據imagestring裡面的參數,定義變數,並且為變數賦值

imagestring($image,$fontsze,$x,$y,$fontcontent,$fontcolor)

}

$fontcontent = substr($data,rand(0,strlen($data)),1);

如果要數字和字母的組合,substr方法的意思是返回字串的子串,返回的字串隨機取得data,從這開始,最多有1個長度

第三步產生驗證碼 內容

目標:為驗證碼增加幹擾元素,幹擾元素為點或線

方法:imagesetpixel點,imageline-線(資源檔,起始位置,顏色)

注意事項:幹擾元素一定要控制好顏色和數量,避免喧賓奪主

第四步:通過session儲存驗證資訊

目標:在伺服器端做記錄,便於使用者輸入驗證碼後做校正

方法:session_start()

注意事項:session_start()必須處於指令碼最頂端

多服務情況下,要考慮集中管理session管理

imagepng 以png格式將圖片輸出到瀏覽器或檔案

imagedestroy 銷毀圖片 好習慣

在這些方法中,資源的使用非常多,就是每一個方法都要$image這個畫布

<php?$image = imagecreatetruecolor( 100,30);$bgcolor = imagecolorallocate($image,255,255,255);imagefill($image,0,0,$bgcolor);// for($i=0;$i<4;$i++){// $fontsize = 6;// $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));// $fontcontent = rand(0,9);// $x = ($i*100/4)+rand(5,10);// $y = rand(5,10);// imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor );// }$captch_code= '';for($i=0 ;$i<4;$i++){    $fontsize = 6;    $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));    $data = 'abcdefhijkimnpqrstuvwxy345678';    $fontcontent = substr($data,rand(0,strlen($data)),1);     $captch_code.=$fontcontent;    $x = ($i*100/4)+rand(5,10);    $y = rand(5,10);    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor );    }$SESSION['authcode']=$captch_code;for($i=0;$i<200;$i++){$pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));imagesetpixel($image,rand(1,99),rand(1,99),$pointcolor);}for($i=0;$i<3;$i++){$linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));imageline($image,rand(1,99),rand(1,99),rand(1,99),rand(1,99),$pointcolor);}header('content-type: image/png');imagepng( $image);//end;imagedestroy( $iamge);?>

驗證碼的製作到這裡就,接下來就是在伺服器端,做校正

src="captcha-2.php?r=<?php echo rand();?>"   對於這個r 找了資料,沒什麼大用

<image border='1' src='captcha-2.php' onclick="this.src='captcha.php?t=' + Math.random()" title="點擊重新整理"/> 本意是這樣

他這裡還用t 呢,所以r 呀 t 呀

考慮到大小寫,這裡使用strtolower() 將使用者輸入的大寫字母,統統轉化為小寫字母

<?phpif(isset($_REQUEST['code'])){    session_start();    if (strtolower($_REQUEST['code'])==$_SESSION['code'])    {        header('Content-type: text/html; charset=UTF8');        echo '<h1 color="#0000CC">輸入正確</h1>';    }    else{        header('Content-type: text/html; charset=UTF8');        echo '<h1 color="#CC0000"><b>輸入錯誤</b></h1>';    }    exit();}?><!DOCTYPE html><html><head>    <meta charset="utf-8"/>    <title>確認驗證</title></head><body><form method="post" action="form.php">    <p>驗證碼圖片:<img border="1" src="captcha-2.php?r=<?php echo rand();?>" width="100" height="30">    </p>    <p>請輸入圖片的內容:<input type="text" name="code" value=""/></p>    <p><input type="submit" value="提交" style="padding:6px 20px;"></p></form></body></html>

相關文章推薦:

如何用PHP將txt檔案內容轉換成數組並按行數擷取指定內容(樣本)

php如何利用經度和緯度來計算兩點之間的距離(純程式碼)

php如何刪除目錄及目錄下的所有檔案的代碼執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.