php制作動(dòng)態(tài)隨機(jī)驗(yàn)證碼_PHP教程
推薦:PHP獲取一年中每個(gè)星期的開始和結(jié)束日期的方法這篇文章主要介紹了PHP獲取一年中每個(gè)星期的開始和結(jié)束日期的方法,涉及php對(duì)日期操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下 本文實(shí)例講述了PHP獲取一年中每個(gè)星期的開始和結(jié)束日期的方法。分享給大家供大家參考。具體分析如下: 最近項(xiàng)目中需要做個(gè)提交周
這篇文章主要介紹了php制作動(dòng)態(tài)隨機(jī)驗(yàn)證碼的方法的相關(guān)資料,需要的朋友可以參考下
驗(yàn)證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試)的縮寫,是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序。可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試,實(shí)際上用驗(yàn)證碼是現(xiàn)在很多網(wǎng)站通行的方式,我們利用比較簡(jiǎn)易的方式實(shí)現(xiàn)了這個(gè)功能。
這個(gè)問題可以由計(jì)算機(jī)生成并評(píng)判,但是必須只有人類才能解答。由于計(jì)算機(jī)無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認(rèn)為是人類。
Php制作動(dòng)態(tài)驗(yàn)證碼是基于php的圖像處理,下面首先介紹一下php的圖像處理。
一.php圖像處理簡(jiǎn)介
在PHP5中,動(dòng)態(tài)圖象的處理要比以前容易得多。PHP5在php.ini文件中包含了GD擴(kuò)展包,只需去掉GD擴(kuò)展包的相應(yīng)注釋就可以正常使用了。PHP5包含的GD庫(kù)正是升級(jí)的GD2庫(kù),其中包含支持真彩圖像處理的一些有用的JPG功能。
一般生成的圖形,通過PHP的文檔格式存放,但可以通過HTML的圖片插入方式SRC來直接獲取動(dòng)態(tài)圖形。比如,驗(yàn)證碼、水印、微縮圖等。
創(chuàng)建圖像的一般流程:
1).設(shè)定標(biāo)頭,告訴瀏覽器你要生成的MIME類型。
2).創(chuàng)建一個(gè)圖像區(qū)域,以后的操作都將基于此圖像區(qū)域。
3).在空白圖像區(qū)域繪制填充背景。
4).在背景上繪制圖形輪廓輸入文本。
5).輸出最終圖形。
6).清除所有資源。
7).其他頁(yè)面調(diào)用圖像。
第一步,設(shè)置文件MIME類型,輸出類型 將輸出類型改成圖像流
代碼如下:
header('Content-Type: image/png;');
一般生成的圖像可以是png,jpeg,gif,wbmp
第二步,創(chuàng)建一個(gè)圖形區(qū)域,圖像背景
imagecreatetruecolor() 返回一個(gè)圖像標(biāo)識(shí)符,代表了一幅大小為 x_size 和 y_size 的黑色圖像。語法:resource imagecreatetruecolor ( int $width , int $height )
代碼如下:
$im = imagecreatetruecolor(200,200);
第三步,在空白圖像區(qū)域繪制填充背景
要有顏色填充器;imagecolorallocate -- 為一幅圖像分配顏色;語法:int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
代碼如下:
$blue = imagecolorallocate($im,0,102,255);
將這個(gè)blue顏色填充到背景上去;imagefill -- 區(qū)域填充;語法:bool imagefill ( resource $image , int $x , int $y , int $color )
代碼如下:
imagefill($im,0,0,$blue);
第四步,在藍(lán)色的背景上輸入一些線條,文字等
顏色填充器
代碼如下:
$white = imagecolorallocate($im,255,255,255);
畫兩條線段:imageline
imageline() 用 color 顏色在圖像 image 中從坐標(biāo) x1,y1 到 x2,y2(圖像左上角為 0, 0)畫一條線段。語法:bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
代碼如下:
imageline($im,0,0,200,200,$white);
imageline($im,200,0,0,200,$white);
水平地畫一行字符串:imagestring
imagestring() 用 col 顏色將字符串 s 畫到 image 所代表的圖像的 x,y 坐標(biāo)處(這是字符串左上角坐標(biāo),整幅圖像的左上角為 0,0)。如果font 是 1,2,3,4 或 5,則使用內(nèi)置字體。語法:bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
代碼如下:
imagestring($im,5,66,20,'jingwhale',$white);
第五步,輸出最終圖形
imagepng() 將 GD 圖像流(image)以 PNG 格式輸出到標(biāo)準(zhǔn)輸出(通常為瀏覽器),或者如果用 filename 給出了文件名則將其輸出到該文件。語法:bool imagepng ( resource $image [, string $filename ] )
代碼如下:
imagepng($im);
第六步,我要將所有的資源全部清空
imagedestroy() 釋放與 image 關(guān)聯(lián)的內(nèi)存。語法:bool imagedestroy ( resource $image )
代碼如下:
imagedestroy($im);
其他頁(yè)面(html)調(diào)用創(chuàng)建的圖形
代碼如下:
<img src="Demo4.php" alt="PHP創(chuàng)建的圖片" />
示例代碼如下:
代碼如下:
<?php
//第一步,設(shè)置文件MIME類型
header('Content-Type: image/png;');
//第二步,創(chuàng)建一個(gè)圖形區(qū)域,圖像背景
$im = imagecreatetruecolor(200,200);
//第三步,在空白圖像區(qū)域繪制填充背景
$blue = imagecolorallocate($im,0,102,255);
imagefill($im,0,0,$blue);
//第四步,在藍(lán)色的背景上輸入一些線條,文字等
$white = imagecolorallocate($im,255,255,255);
imageline($im,0,0,200,200,$white);
imageline($im,200,0,0,200,$white);
imagestring($im,5,66,20,'Jing.Whale',$white);
//第五步,輸出最終圖形
imagepng($im);
//第六步,我要將所有的資源全部清空
imagedestroy($im);
?>
顯示效果:
二.創(chuàng)建動(dòng)態(tài)驗(yàn)證碼
附:代碼源地址https://github.com/cnblogs-/php-captcha
1. 創(chuàng)建帶驗(yàn)證碼的圖片,并模糊背景
隨機(jī)碼采用16進(jìn)制;模糊背景即在圖片背景加上線條、雪花等。
1)創(chuàng)建隨機(jī)碼
代碼如下:for ($i=0;$i<$_rnd_code;$i++) {
$_nmsg .= dechex(mt_rand(0,15));
}
string dechex ( int $number ),返回一字符串,包含有給定 number 參數(shù)的十六進(jìn)制表示。
2)保存在session
代碼如下: $_SESSION['code'] = $_nms
3)創(chuàng)建圖片
分享:php模擬post提交數(shù)據(jù)的方法這篇文章主要介紹了php模擬post提交數(shù)據(jù)的方法,實(shí)例分析了socket方法模擬post提交數(shù)據(jù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下 本文實(shí)例講述了php模擬post提交數(shù)據(jù)的方法。分享給大家供大家參考。具體如下: php模擬post提交數(shù)據(jù),用處很多,可用來網(wǎng)站的采集,
- PHP獲取一年中每個(gè)星期的開始和結(jié)束日期的方法
- php模擬post提交數(shù)據(jù)的方法
- PHP遍歷數(shù)組的三種方法及效率對(duì)比分析
- PHP進(jìn)程同步代碼實(shí)例
- PHP CURL 內(nèi)存泄露問題解決方法
- PHP中捕獲超時(shí)事件的方法實(shí)例
- php單例模式示例分享
- PHP 正則表達(dá)式小結(jié)
- php使用iconv中文截?cái)鄦栴}的解決方法
- php+Mysqli利用事務(wù)處理轉(zhuǎn)賬問題實(shí)例
- php中使用url傳遞數(shù)組的方法
- php使用類繼承解決代碼重復(fù)的問題
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- PHP中使用協(xié)同程序?qū)崿F(xiàn)合作多任務(wù)
- 關(guān)于方便實(shí)用的PHP生成靜態(tài)頁(yè)面類的介紹
- 深入php函數(shù)file_get_contents超時(shí)處理的方法詳解
- Zend Framework 入門——多國(guó)語言支持
- php中mb_convert_encoding 和 iconv 的區(qū)別
- php實(shí)現(xiàn)gb2312和unicode間編碼轉(zhuǎn)換
- 解析PHP網(wǎng)站開發(fā)中常見的問題
- PHP與正則表達(dá)系列之一: PHP中的正則表達(dá)式
- 基于PHP MySQL的聊天室設(shè)計(jì)
- 利用PHP實(shí)現(xiàn)短域名互轉(zhuǎn)
- 相關(guān)鏈接:
- 教程說明:
PHP教程-php制作動(dòng)態(tài)隨機(jī)驗(yàn)證碼。