一般在用驗證碼時我們都要實現局部刷新了,這個是必然的,也是提高用戶體驗的一點,下面我們來看一個php驗證碼在實際應用中的用法,有需要的朋友來參考一下。
/*
* Auth_code()是驗證碼函數
* @access public
* @param int $width 表示驗證碼的長度,默認為80
* @param int $height 表示驗證碼的高度,默認為20
* @param int $num 表示驗證碼中數字位數,默認為4
* @param int $line 表示驗證碼中線的條數,默認為4
* @param int $line 表示驗證碼中點的個數,默認為150
*/
function Auth_code($width = 80,$height = 20,$num = 4,$line = 4,$dot = 150) {
$length = floor($width/$num); //floor:取整數部分 length:每段平均長度
for($i=0;$i<$num;$i++)
@$rand.=dechex(mt_rand(1,15));
$_SESSION['code']=$rand;
//新建一個黑色底的畫板
$im=imagecreatetruecolor($width,$height);
//取色
$green=imagecolorallocate($im,0,255,0);
$red = imagecolorallocate($im,255,0,0);
$white=imagecolorallocate($im,255,255,255);
$black = imagecolorallocate($im,0,0,0);
//填充畫板
//imagefill($im,0,0,$green);
//畫線
for($i=0;$i<$line;$i++){
$color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imageline($im,rand(10,$width-10),0,rand(0,$width),$height,$color);
}
//畫點
for($i=0;$i<$dot;$i++){
$color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im,rand(0,$width),rand(0,$height),$color);
}
//畫數字
for($i=0;$i<$num;$i++) {
imagestring($im,5,mt_rand($i*$length+1,($i+1)*$length-8),mt_rand(0,$height-14),$_SESSION['code'][$i],$white);
}
//輸出圖片
header("content-type:image/jpeg");
imagejpeg($im);
}
-主要函數:
imagecreatetruecolor //新建一個黑色底的畫板
imagecolorallocate //取色
imagefill //填充畫板
imageline //畫線
imagesetpixel //畫點
imagestring //畫字符串(本驗證碼為數字)
注意:在將數字驗證碼畫上畫板時要注意字體越界,所以要相應減去一些范圍,詳見附件。
-局部刷新驗證碼: