php生成驗證碼,點擊可刷新的實例

PHP生成驗證碼,並可以進行點擊刷新。

驗證碼原理:首先生成一個隨機數,然後在數據數上面加上干擾圖片,同時把該數據生成圖片並輸出。
這個數據保存在session中。然後把用戶的輸入與保存在session中的數據進行匹配,進行驗證。

verifyCode.php代碼如下:
<?php
Header("Content-type: image/PNG");
session_start();
//準備好隨機數發生器種子
srand((double)microtime()*1000000);
//準備圖片的相關參數
$im = imagecreate(62,20);
$black = ImageColorAllocate($im, 0,0,0); //RGB黑色標識符
$white = ImageColorAllocate($im, 255,255,255); //RGB白色標識符
$gray = ImageColorAllocate($im, 200,200,200); //RGB灰色標識符
//開始作圖
imagefill($im,0,0,$gray);
while(($randval=rand()%100000)<10000);
{
$_SESSION["check_num"] = $randval;
//將四位整數驗證碼繪入圖片
imagestring($im, 5, 10, 3, $randval, $black);
}
//加入干擾象素
for($i=0;$i<200;$i++){
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
//輸出驗證圖片
ImagePNG($im);
//銷燬圖像標識符
ImageDestroy($im);
//header("content-type:image/png");
////定義header,聲明圖片文件,最好是png,無版權之擾;
////生成新的四位整數驗證碼
//session_start();//開啓session;
//$authnum_session = '';
//$str = 'abcdefghijkmnpqrstuvwxyz1234567890';
////定義用來顯示在圖片上的數字和字母;
//$l = strlen(str); //得到字串的長度;
////循環隨機抽取四位前面定義的字母和數字;
//for($i=1;$i<=4;$i++)
//{
//$num=rand(0,l-1);
////每次隨機抽取一位數字;從第一個字到該字串最大長度,
////減1是因爲截取字符是從0開始起算;這樣34字符任意都有可能排在其中;
//$authnum_session.= str($num);
////將通過數字得來的字符連起來一共是四位;
//} //by www.jbxue.com
//session_register("authnum_session");
////用session來做驗證也不錯;註冊session,名稱爲authnum_session,
////其它頁面只要包含了該圖片
////即可以通過_session["authnum_session"]來調用
////生成驗證碼圖片,
//srand((double)microtime()*1000000);
//$im = imagecreate(50,20);//圖片寬與高;
////主要用到黑白灰三種色;
//$black = imagecolorallocate(im, 0,0,0);
//$white = imagecolorallocate(im, 255,255,255);
//$gray = imagecolorallocate(im, 200,200,200);
////將四位整數驗證碼繪入圖片
//imagefill(im,68,30,gray);
////如不用幹擾線,註釋就行了;
//$li = imagecolorallocate(im, 220,220,220);
//for($i=0;$i<3;$i++)
//{//加入3條幹擾線;也可以不要;視情況而定,因爲可能影響用戶輸入;
//imageline(im,rand(0,30),rand(0,21),rand(20,40),rand(0,21),li);
//}
////字符在圖片的位置;
//imagestring(im, 5, 8, 2, authnum_session, white);
//for($i=0;$i<90;$i++)
//{//加入干擾象素
//imagesetpixel(im, rand()%70 , rand()%30 , gray);
//}
//imagepng(im);
//imagedestroy(im);


/*
session_start();
//生成驗證碼圖片
Header("Content-type: image/PNG");
$im = imagecreate(44,18);
$back = ImageColorAllocate($im, 245,245,245);
imagefill($im,0,0,$back); //背景
srand((double)microtime()*1000000);
//生成4位數字
for($i=0;$i<4;$i++){
$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255));
$authnum=rand(1,9);
$vcodes.=$authnum;
imagestring($im, 5, 2+$i*10, 1, $authnum, $font);
}
for($i=0;$i<100;$i++){ //加入干擾象素
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
$_SESSION['VCODE'] = $vcodes;
*/
?>

爲了能夠無刷新的生成新的驗證碼,即點擊即可生成新的驗證碼,可以這樣:
<dl>
 <dt><label for="verifyCode">驗證碼:</label></dt>
 <dd><input type="text" id="verifyCode" name="verifyCode" value="" size="10" maxlength="10" class="iptext v_ip"/></dd>
 <dd><img style="cursor: pointer" mce_style="cursor: pointer" src="verifyCode.php" mce_src="verifyCode.php" id="verifyCode" align="middle" οnclick="this.src='verifyCode.php?'" alt="刷新驗證碼"/></dd>
</dl> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章