使用php實(shí)現(xiàn)網(wǎng)站驗(yàn)證碼功能【推薦】
驗(yàn)證碼是網(wǎng)站常用的一項(xiàng)安全措施,也是新人站長(zhǎng)較難掌握的一項(xiàng)技能,這里我向大家介紹一簡(jiǎn)單有效的驗(yàn)證碼實(shí)現(xiàn)方法。
開(kāi)始之前
在正式開(kāi)始之前我們需要打開(kāi)php的gd2圖形庫(kù)支持(在php.ini,中搜索“php_gd2.dll”,找到“;extension=php_gd2.dll”并去掉句首的分號(hào)) 。
核心:img.php
這個(gè)頁(yè)面生成一張驗(yàn)證碼并將正確數(shù)值寫(xiě)入 Session
隨機(jī)一個(gè)4位驗(yàn)證碼
$check=rand(1000,9999);
將生成的驗(yàn)證碼寫(xiě)入session
Session_start(); $_SESSION["check"] = $check;
創(chuàng)建一張圖片
$im = imagecreate(80,30);
由于這種圖片的背景默認(rèn)是黑色的所以我們要用白色填充。
imagefill($im,0,0,ImageColorAllocate($im, 255,255,255));
使用imageline隨機(jī)繪制兩條實(shí)線
$y1=rand(0,30); $y2=rand(0,30); $y3=rand(0,30); $y4=rand(0,30); imageline($im,0,$y1,70, $y3,000); imageline($im,0,$y2,70, $y4,000);
在隨機(jī)位置繪制文字
$strx=rand(3,15); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10));
輸出圖像
Header("Content-type: image/PNG");
ImagePNG($img);
結(jié)束,下面是完整代碼
<?php $check=rand(1000,9999);
Session_start();
$_SESSION["check"] = $check;
$img = imagecreate(80,30);
imagefill($img,0,0,ImageColorAllocate($img,255,255,255));
$y1=rand(0,30);
$y2=rand(0,30);
$y3=rand(0,30);
$y4=rand(0,30);
imageline($img,0,$y1,70, $y3,ImageColorAllocate($img,55,255,25));
imageline($img,0,$y2,70, $y4,ImageColorAllocate($img,55,55,255));
$strx=rand(3,15);
$stry=rand(2,15);
imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100));
$strx+=rand(15,20);
$stry=rand(2,15);
imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78));
$strx+=rand(15,20);
$stry=rand(2,15);
imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40));
$strx+=rand(15,20);
$stry=rand(2,15);
imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10));
Header("Content-type: image/PNG");
ImagePNG($img);
用戶界面:index.php
想必大家都知道怎么做,我就直接給出代碼了
<!DOCTYPE html> <html> <body> <form action="action.php" method="post"> <input type="text" name="cikle" placeholder="驗(yàn)證碼"> <br> <img id="cikle" style="-webkit-user-select: none" src="img.php"><input type="submit" value="Submit"> </form> </body> </html>
以上的代碼將用戶輸入的數(shù)值傳遞到“action.php”中
檢查:action.php
這一步要將用戶輸入數(shù)值與session中的數(shù)值進(jìn)行比對(duì)
相等,輸出“正確”
不相等,輸出“不正確”
<?php
Session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if($_SESSION["check"]!=intval($_POST["cikle"])){
echo "不正確";
}else{
echo "正確";
}
}
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- PHP封裝函數(shù)實(shí)現(xiàn)生成隨機(jī)的字符串驗(yàn)證碼
- PHP生成圖片驗(yàn)證碼功能示例
- PHP 極驗(yàn)驗(yàn)證碼實(shí)例講解
- 分享一個(gè)漂亮的php驗(yàn)證碼類(lèi)
- PHP使用CURL實(shí)現(xiàn)對(duì)帶有驗(yàn)證碼的網(wǎng)站進(jìn)行模擬登錄的方法
- 完美解決thinkphp驗(yàn)證碼出錯(cuò)無(wú)法顯示的方法
- php發(fā)送短信驗(yàn)證碼完成注冊(cè)功能
- php5 圖片驗(yàn)證碼實(shí)現(xiàn)代碼
- ThinkPHP驗(yàn)證碼使用簡(jiǎn)明教程
- php中文字母數(shù)字驗(yàn)證碼實(shí)現(xiàn)代碼
相關(guān)文章
攻克CakePHP系列一 連接MySQL數(shù)據(jù)庫(kù)
請(qǐng)先參閱以前寫(xiě)的文章以便對(duì)CakePHP有所了解文章,上一篇2008-10-10
解決form中action屬性后面?傳遞參數(shù) 獲取不到的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決form中action屬性后面?傳遞參數(shù) 獲取不到的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
PHP獲取一年中每個(gè)星期的開(kāi)始和結(jié)束日期的方法
這篇文章主要介紹了PHP獲取一年中每個(gè)星期的開(kāi)始和結(jié)束日期的方法,涉及php對(duì)日期操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
php正則匹配文章中的遠(yuǎn)程圖片地址并下載圖片至本地
這篇文章主要介紹了php正則匹配文章中的遠(yuǎn)程圖片地址并下載圖片至本地的實(shí)現(xiàn)技巧,可實(shí)現(xiàn)采集并保存遠(yuǎn)程圖片的功能,是非常實(shí)用的技巧,感興趣的小伙伴可以參考一下2015-09-09
PHP Primary script unknown 解決方法總結(jié)
在本篇文章里小編給大家整理的是關(guān)于PHP Primary script unknown 終極解決方法以及相關(guān)知識(shí)點(diǎn),有需要的朋友們參考學(xué)習(xí)下。2019-08-08
php中如何同時(shí)使用session和cookie來(lái)保存用戶登錄信息
本篇文章是對(duì)在php中同時(shí)使用session和cookie來(lái)保存用戶登錄信息的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
PHP global全局變量經(jīng)典應(yīng)用與注意事項(xiàng)分析【附$GLOBALS用法對(duì)比】
這篇文章主要介紹了PHP global全局變量經(jīng)典應(yīng)用與注意事項(xiàng),結(jié)合實(shí)例形式分析了php中g(shù)lobal全局變量的功能、使用方法及相關(guān)操作注意事項(xiàng),并附帶了$GLOBALS用法作為對(duì)比,需要的朋友可以參考下2019-07-07
PHP獲取鏈表中倒數(shù)第K個(gè)節(jié)點(diǎn)的方法
這篇文章主要介紹了PHP獲取鏈表中倒數(shù)第K個(gè)節(jié)點(diǎn)的方法,涉及php針對(duì)鏈表的遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01

