首頁  >  文章  >  後端開發  >  基於PHP製作驗證碼實例詳解

基於PHP製作驗證碼實例詳解

墨辰丷
墨辰丷原創
2018-06-01 09:49:191217瀏覽

這篇文章主要介紹了PHP製作驗證碼,使用PHP對網站驗證碼是為了防止使用程式惡意註冊、暴力破解或批量發文而設定的。

網站註冊、登入又或是留言頁面,都需要註冊碼來驗證目前操作者的合法性,為了防止網站被機器惡意註冊。

產生驗證碼無非就那麼幾個步驟,首先是取得一個隨機字串,然後建立一個布畫,將產生的字串寫到布畫上,我們也可以在布畫上畫線畫雪花,現在貼文一段產生驗證碼的程式碼。

原始程式碼:

<?php
session_start(); //开启session
//创建随机码,并保存在session中
for($i=0;$i<4;$i++)
{
$_nmsg.=dechex(mt_rand(0,15));
}
//保存到session中
$_SESSION[&#39;code&#39;]=$_nmsg;
//设置图片长和高

$_width=75;
$_height=25;
//创建一张图像
$_img=imagecreatetruecolor($_width,$_height);

//白色背景
$_white=imagecolorallocate($_img,255,255,255);
//填充到背景上
imagefill($_img,0,0,$_white);

//黑色边框
$_black=imagecolorallocate($_img,0,0,0);
imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

//随即画出5个线条
for($i=0;$i<5;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}

//雪花
for($i=0;$i<10;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",$_rnd_color);
}

//输出验证码

for($i=0;$i<strlen($_SESSION[&#39;code&#39;]);$i++)
{
imagestring($_img,5,10+$i*15,mt_rand(0,10),$_SESSION[&#39;code&#39;][$i],$_blackr);
}

//输出图像
header(&#39;Content-Type:image/png&#39;);
imagepng($_img);
//销毁图像
imagedestroy($_img);
?>

#程式碼中將使用下列函數:

mt_rand — 產生更好的隨機數
int mt_rand ([ int $min ], int $max )很多老的libc 的隨機數產生器具有一些不確定和未知的特性而且很慢。 PHP 的 rand() 函數預設使用 libc 隨機數產生器。

mt_rand()函數是非正式用來取代它的。函數用了Mersenne Twister中已知的特性作為隨機數產生器,它可以產生隨機數值的平均速度比 libc 提供的 rand() 快四倍。

dechex — 十進位轉換為十六進位傳回一字串,包含有給定 number參數的十六進位表示。所能轉換的最大數值為十進制的 4294967295,其結果為 "ffffffff"。

imagecreatetruecolor — 新建一個真彩色圖像
resource imagecreatetruecolor ( int $x_size , int $y_size )

imagecreatetruecolor() 返回一個圖像標識符,代表了一幅大小為x_size 和y_size 的黑色圖像。

imagecolorallocate — 為一幅圖像分配顏色
int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
imagecolorallocate() 傳回一個標識符,代表了由給定的RGB 成分組成的顏色。 red,green 和 blue 分別是所需的顏色的紅,綠,藍成分。這些參數是 0 到 255 的整數或十六進位的 0x00 到 0xFF。 imagecolorallocate()必須被呼叫以建立每一種用在 image 所代表的影像中的顏色。

imagefill — 區域填滿
bool imagefill ( resource $image , int $x , int $y , int $color )
imagefill() 在image圖片的座標x,y(圖片左上角為0, 0)處以color顏色執行區域填滿(即與x, y 點顏色相同且相鄰的點都會被填滿)。

imagerectangle — 畫一個長方形
bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
imagerectangle() 用col 顏色在image 影像中畫一個矩形,其左上角座標為x1, y1,右下角座標為x2, y2。圖像的左上角座標為 0, 0。

imageline — 畫一條線段
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
imageline() 用color顏色在圖像image 中從座標x1,y1 到x2,y2(圖像左上角為0, 0)畫一條線段。

imagestring — 水平地畫一行字串
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
imagestring()用col顏色將字串s 畫到image所代表的圖像的x,y座標處(這是字串左上角座標,整幅圖像的左上角為0,0)。如果 font 是 1,2,3,4 或 5,則使用內建字體。

imagepng — 以PNG 格式將映像輸出到瀏覽器或檔案
imagepng() 將GD 映像流(image)以PNG 格式輸出到標準輸出(通常為瀏覽器),或如果使用filename給出了文件名則將其輸出到該文件。

imagedestroy — 銷毀一圖像

imagedestroy() 釋放與 image 關聯的記憶體。

將原始程式碼儲存為code.php是個php文件,我們該如何使用他?

imagepng已經將這個php檔案輸出成了png檔案

直接呼叫就可以了

8f14cf8be6b010acf0b53b17391f56e4

如果要使用驗證碼,記得開啟session哦

<?php
session_start();
echo $_SESSION[&#39;code&#39;];
?>

總結:以上就是本篇文的全部內容,希望對大家的學習有所幫助。

相關推薦:

php取得剛插入資料的id 的幾種方法

php基於單例模式封裝mysql類別的方法

#thinkPHP框架中執行交易的方法

#

以上是基於PHP製作驗證碼實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn