首頁 > 後端開發 > php教程 > php實作驗證碼的步驟以及服務端校驗的程式碼

php實作驗證碼的步驟以及服務端校驗的程式碼

不言
發布: 2023-04-03 16:04:01
原創
2531 人瀏覽過

這篇文章要跟大家介紹的內容是關於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= &#39;&#39;;
for($i=0 ;$i<4;$i++){
    $fontsize = 6;
    $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
    $data = &#39;abcdefhijkimnpqrstuvwxy345678&#39;;
    $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[&#39;authcode&#39;]=$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(&#39;content-type: image/png&#39;);
imagepng( $image);
//end;
imagedestroy( $iamge);
?>
登入後複製

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

src="captcha-2.php?r=<?php echo rand();?>"   对于这个r 找了资料,没什么大用
登入後複製

本意是這樣

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

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

<?php

if(isset($_REQUEST[&#39;code&#39;]))
{
    session_start();
    if (strtolower($_REQUEST[&#39;code&#39;])==$_SESSION[&#39;code&#39;])
    {
        header(&#39;Content-type: text/html; charset=UTF8&#39;);
        echo &#39;<h1 color="#0000CC">输入正确</h1>&#39;;
    }
    else{
        header(&#39;Content-type: text/html; charset=UTF8&#39;);
        echo &#39;<h1 color="#CC0000"><b>输入错误</b></h1>&#39;;
    }
    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如何刪除目錄及目錄下的所有檔案的程式碼實例

以上是php實作驗證碼的步驟以及服務端校驗的程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板