2015年5月17日 星期日

驗證碼


驗證碼分成三個部分,
A test.php  主頁面顯示驗證碼輸入 跟刷新按鈕
B image.php 產出亂數的圖片,並存入session
C check.php 驗證圖片跟輸入的值是否符合

需注意 在IE 下如點選驗證碼無刷新,
需要再按鈕跟圖片網址加上變數如 時間,
這樣每次刷新網址的參數會變,
避免IE如相同圖片會有暫存無刷新。

1. test.php    主頁面顯示驗證碼輸入 跟刷新按鈕


Check 

2.image.php     產出亂數的圖片,並存入session


ob_start();
session_start();
header('content-Type:image/gif');
echo mt_srand(time());
$randval = mt_rand();
$seccode = substr($randval,-4);
$length = strlen($seccode);
$_SESSION['seccode'] = $seccode; //用SESSION保存驗證碼
$img=imagecreate(80,30);
$black = ImageColorAllocate($img, 0,0,0);
$white = ImageColorAllocate($img, 255,255,255);
$gray = ImageColorAllocate($img, 200,200,200);
imagefill($img,0,0,$gray);

for($i=0;$i<200;$i++) //加入干擾象素
{
$randcolor = ImageColorallocate($img,rand(10,250),rand(10,250),rand(10,250));
imagesetpixel($img,rand()%90,rand()%30,$randcolor);
}

for ($i = 0; $i < $length; $i++) {
$color = imagecolorallocate($img,abs(mt_rand()%256),abs(mt_rand()%256),abs(mt_rand()%256));
imagechar($img,20,abs(mt_rand()%4)+$i*15,abs(mt_rand()%5),$seccode[$i],$color);
}
imagegif($img);
imageDestroy($img);
ob_end_flush();


3.check.php 驗證圖片跟輸入的值是否符合

session_start();
if($_POST['imgCode']==$_SESSION['seccode'])
echo '驗證成功';
else
echo '驗證失敗';

沒有留言:

張貼留言