用php生成帶有雪花背景的驗證碼

來源:文萃谷 1.26W

用php生成帶有雪花背景的驗證碼,有需要的朋友可以參考下。以下代碼,有詳細的註釋,方便學習。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!

用php生成帶有雪花背景的驗證碼

<?session_start();?>

<FORM METHOD=POST ACTION="">

<input type=text name=number maxlength=4><img src="

<INPUT TYPE="submit" name="sub">

</FORM>

<?

//檢驗校驗碼

if(isset($HTTP_POST_VARS["sub"])):

if($HTTP_POST_VARS["number"] != $HTTP_SESSION_VARS[login_check_number] || empty($HTTP_POST_VARS["number"])){

echo "校驗碼不正確!" ;

}else{

echo"驗證碼通過!";

}

endif;

show_source('');

//以上本頁的源碼

//以下是生成驗證碼的源碼

show_source('');

?>

<?php

session_start();

session_register("login_check_number");

//昨晚看到了chianren上的'驗證碼效果,就考慮了一下,用PHP的GD庫完成了類似功能

//先成生背景,再把生成的驗證碼放上去

$img_height=120; //先定義圖片的長、寬

$img_width=40;

if($HTTP_GET_VARS["act"]== "init"){

//srand(microtime() * 100000);//PHP420後,srand不是必須的

for($Tmpa=0;$Tmpa<4;$Tmpa++){

$nmsg.=dechex(rand(0,15));

}//by sports98

$HTTP_SESSION_VARS[login_check_number] = $nmsg;

//$HTTP_SESSION_VARS[login_check_number] = strval(mt_rand("1111","9999")); //生成4位的隨機數,放入session中

//誰能做下補充,可以同時生成字母和數字啊??----由sports98完成了

$aimg = imageCreate($img_height,$img_width); //生成圖片

ImageColorAllocate($aimg, 255,255,255); //圖片底色,ImageColorAllocate第1次定義顏色PHP就認為是底色了

$black = ImageColorAllocate($aimg, 0,0,0); //定義需要的黑色

ImageRectangle($aimg,0,0,$img_height-1,$img_width-1,$black);//先成一黑色的矩形把圖片包圍

//下面該生成雪花背景了,其實就是在圖片上生成一些符號

for ($i=1; $i<=100; $i++) { //先用100個做測試

imageString($aimg,1,mt_rand(1,$img_height),mt_rand(1,$img_width),"*",imageColorAllocate($aimg,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)));

//哈,看到了吧,其實也不是雪花,就是生成*號而已。為了使它們看起來"雜亂無章、5顏6色",就得在1個1個生成它們的時候,讓它們的位置、顏色,甚至大小都用隨機數,rand()或mt_rand都可以完成。

}

//上面生成了背景,現在就該把已經生成的隨機數放上來了。道理和上面差不多,隨機數1個1個地放,同時讓他們的位置、大小、顏色都用成隨機數~~

//為了區別於背景,這裏的顏色不超過200,上面的不小於200

for ($i=0;$i<strlen($HTTP_SESSION_VARS[login_check_number]);$i++){

imageString($aimg, mt_rand(3,5),$i*$img_height/4+mt_rand(1,10),mt_rand(1,$img_width/2), $HTTP_SESSION_VARS[login_check_number][$i],imageColorAllocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)));

}

Header("Content-type: image/png"); //告訴瀏覽器,下面的數據是圖片,而不要按文字顯示

ImagePng($aimg); //生成png格式。

ImageDestroy($aimg);

}

?>

熱門標籤