第一步:創(chuàng)建一個畫布
成都創(chuàng)新互聯(lián)自2013年起,先為丹鳳等服務(wù)建站,丹鳳等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為丹鳳企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
第二步:創(chuàng)建顏色
第三步:準備字符
第四步:往 畫布上寫字符
第五步:畫干擾線(點)
第六步:輸出格式
第七步:輸出圖片
第八步:銷毀資源
<?php
verify();
function verify($width = 100 , $height = 40 , $num = 5 , $type = 3 ){
//1 創(chuàng)建畫布
$image = imagecreatetruecolor($width , $height);
//2 創(chuàng)建顏色 //因為后邊總是用,所以寫了兩個函數(shù),分別是lightColor(淺顏色)、deepColor(深顏色)
//3 創(chuàng)建字符 //這里是自己選擇的類型,1 就是純數(shù)字,2 就是純小字母, 3 就是數(shù)字大小寫字母的混合
switch($type){
case 1:
//定義字符串
$str = "0123456789";
//打亂字符串
$strNew = str_shuffle($str);
//截取$num個
$string = substr($strNew , 0 , $num);
break;
case 2:
//定義字符
$arr = range('a' , 'z');
//打亂字符串數(shù)組
shuffle($arr);
//截取
$tmp = array_slice($arr , 0 , $num);
//連成字符串
$string = join('' , $tmp);
break;
case 3:
$str = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
$string = substr(str_shuffle($str) , 0 , $num);
break;
}
//給背景填充淺顏色 //背景顏色太深的話驗證碼就看不清了
imagefilledrectangle($image , 0 , 0 , $width , $height , lightColor($image));
//4 往畫布上寫入字符
for($i = 0; $i<$num; $i++) { //因為我們設(shè)定的是輸出5 個字符,所以$i是小于的$num
//floor是取整,$width / $num 把寬度分了$num塊地,*$i是一個字符占一塊地,以免全都堆在一塊看不出來
$x = floor($width / $num) * $i;
$y = mt_rand(10 , $height - 20);
imagechar ($image , 5 , $x , $y , $string[$i] , deepColor($image));
}
//5 畫干擾線、點
//干擾線
for($i = 0; $i<$num; $i++) {
imagearc ($image , mt_rand(10 , $width) , mt_rand(10 , $height) , mt_rand(10 , $width) , mt_rand(10 , $height) , mt_rand(0 , 10) , mt_rand(0 , 270) , deepColor($image));
}
//干擾點
for( $i = 0; $i<50; $i++) {
imagesetpixel($image , mt_rand(0 , $width) , mt_rand(0 , $height) , deepColor($image));
}
ob_clean();//擦除緩沖區(qū)
//6 告訴瀏覽器輸出格式:png
header("Content-type: image/png");
//7 輸出圖片
imagepng($image);
//8 銷毀
imagedestroy($image);
return $string;
//echo $string;
}
//設(shè)置深淺顏色
function lightColor ($image) {
return imagecolorallocate($image , mt_rand(120 , 255) , mt_rand(120 , 255) , mt_rand(120 , 255));
}
function deepColor ($image) {
return imagecolorallocate($image , mt_rand(0 , 120) , mt_rand(0 , 120) , mt_rand(0 , 120));
}
?>特別說明:
ob_clean();//擦除緩沖區(qū)
之前是沒有加上這個的,結(jié)果就告訴我“因存在錯誤而無法顯示”,如下圖:

不過幸運的是,在百度上找到答案了:https://blog.csdn.net/ghbfgb/article/details/50845075。加上之后,就很輕易的解決了這個問題,現(xiàn)在的效果是這樣的:

好了。
文章標題:PHP實現(xiàn)驗證碼
文章源于:http://chinadenli.net/article10/ggjpdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、面包屑導(dǎo)航、自適應(yīng)網(wǎng)站、營銷型網(wǎng)站建設(shè)、品牌網(wǎng)站制作、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)