在做項目時會經常用到驗證碼,最多的就是圖形驗證碼,使用驗證碼也是為了網站登錄的安全,會出現各種奇形怪狀的驗證碼,當然現在采取了某些更加高級的技術,這些我們不談。 驗證碼存在的意義就是用來區分到底是人在登錄還是機器在登錄。服務器的資源是有限的,我們需要通過一種機制將這些機器請求給屏蔽掉,從而使資源為人服務。我們來看看怎麼用PHP來實現這個功能~
先看看具體步驟
1.生成驗證碼底圖
2.驗證碼內容生成
3.產生後增加某些干擾元素
4.生成驗證碼,以及對比校驗。
我們再來看看所要掌握的核心技術~
1、PHP圖片處理庫GD
2、隨機數,隨機字母,RGB顏色基本理解
3、SESSION基礎
4、AJAX基礎
接下來吾愛編程就為大家分享一下:
<?php
session_start();
$image = imagecreatetruecolor(100, 30);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image,0,0,$bgcolor);//GD庫需要了解一下~~~
$captch_code='';
for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120),rand(0,120));
$data='abcdefghigklmnopqrstuvwxyz1234567890';
$fontcontent=substr($data, rand(0,strlen($data)),1);//選取子字符
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
$captch_code.=$fontcontent;
}
$_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,29),$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,29), rand(1,99), rand(1,29), $linecolor);//避免干擾元素過多,顏色過深
}
header( "Content-type:image/png" );
imagepng($image);
imagedestroy($image);//別忘了釋放資源
?>
其實總體來說代碼很簡單
最後我們可以再寫一個表單提交,判斷用戶驗證是否正確
<?php
header("Content-Type: text/html; charset=utf-8");
if (isset($_REQUEST['authcode'])) {
session_start();
if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
echo "輸入正確";
}else{
echo "輸入錯誤";
}
exit();
}
?>
這個驗證碼的制作總體來說還算簡單,比較容易上手的一個案例。希望對初學者有所幫助。。。
*