實現數字或字母,數字混合驗證碼

##實現數字或字母,數字混合驗證碼php

1.首先定義驗證碼的背景圖片算法

<?php 
session_start();//開啓session;

$image=imagecreatetruecolor(100, 30);//生成一張長100,高30的背景(默認顏色是黑色)
$bgcolor=imagecolorallocate($image, 255, 255, 255);//把背景定義白色
imagefill($image,0,0,$bgcolor);//所定義的顏色進行區域填充

2.1這裏是實現數字驗證碼的關鍵部分session

for($i=0;$i<4;$i++){
	$fontsize=6;//字體大小
	$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));//底圖已經爲白色就將字體顏色設僞隨機的
	$fontcontent=rand(0,9);//隨機生成0-9數字
	$x=($i*100/4)+rand(5,10);//考慮每一個字所佔的寬度,設置一個算法
	$y=rand(5,10);//數字放到5-10這個區間內
	imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); //在圖像資源上畫出隨機數字
}

2.2只設置數字驗證碼彷佛很以爲有些單一,想要實現更好的效果呢,在這裏咱們能夠實現數字與字母混合驗證碼,這也是最多見的驗證碼。字體

$capatch_code="";
for($i=0;$i<4;$i++){
	$fontsize=6;//字母大小
	$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));//底圖已經爲白色就將字體顏色設僞隨機的
	$data='abcdefghijkmnopqrstuwxy3456789';//能夠把容易混淆的字母和數字去掉
	$fontcontent=substr($data,rand(0,strlen($data)),1);//截取字典$data裏的隨機數
	$capatch_code.=$fontcontent;//把驗證碼保存起來

   $x=($i*100/4)+rand(5,10);//考慮每一個字母所佔的寬度,設置一個算法
	$y=rand(5,10);//字母放到5-10這個區間內
	imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); //在圖像資源上畫出隨機數字
	}
	$_SESSION['authcode']=$capatch_code;//驗證碼保存到authcode變量中

2.3驗證碼大致實現了,這時我們是否是常常會看點驗證碼圖片上有不少干擾點和干擾線條呀,這是咱們就要設置干擾元素啦,小夥伴要注意的是,我們在設置干擾元素的時候,位置和數量是關鍵,切記喧賓奪主啦,畢竟我們的主角可不是干擾元素呀。設計

for($i=0;$i<200;$i++){//追加點,數量小於200
	$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++){//追加線,數量小於3
	$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);
}

2.4 干擾元素設計好了呢,成品立刻就要降生啦,我們如今要作的就是收尾工做啦,這時候就要定義一下圖片類型啦,而後並別忘了必定要輸出我們的成品哦,爲了避免暫用空間呢,我們在一開始的時候是否是設置了 (session_start();//開啓session),最後我們就要用(imagedestroy($image);//銷燬)關閉啦,畢竟作事我們有頭有尾是吧。code

header('content-type:image/png');//定義圖片類型
imagepng($image);//輸出
imagedestroy($image);//銷燬
?>

這個就是我們的成果啦

相關文章
相關標籤/搜索