[php validate| 隨機生成驗證碼並驗證]

php實現動態隨機驗證碼機制  |  PHP生成各類驗證碼和Ajax驗證php


 驗證碼(CAPTCHA)是「Completely Automated Public Turing test to tell Computers and Humans Apart」(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機仍是人的公共全自動程序。
html


captcha.php | validate code generate web

<?php
session_start();
//隨機生成驗證碼的字符串
function random($len) {
    $srcstr="abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
    for($i=0;$i<$len;$i++) {
        @$strs.=$srcstr[mt_rand(0,strlen($srcstr)-1)];
    }
    return ($strs);
}
$str=random(5); //隨機生成的字符串
$width=60;  //驗證碼圖片的寬度
$height=25; //驗證碼圖片的高度
//Date in the past
header("Expires:Mon,26 Jul 1997 05:00:00 GMT");
//always modified  標記內容最後修改時間
header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");
//HTTP/1.1 內容過時時間 
header("Cache-Control:no-store,no-cache,must-revalidate");強制不緩存
header("Cache-Control:post-check=0,pre-check=0",false);
//HTTP/1.0
header("Pragma:no-cache");禁止本頁被緩存

header("Content-Type:image/png");
 
$im=imagecreate($width,$height);
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);    //背景色
$pix=imagecolorallocate($im,187,190,247);        //模糊點顏色
$font=imagecolorallocate($im,41,163,238);        //字體色
//繪製1000個模糊做用的點
mt_srand();
for($i=0;$i<1000;$i++) {
    imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im,5,7,5,$str,$font);//繪製隨機生成的字符串
imagerectangle($im,0,0,$width-1,$height-1,$font);//在驗證碼圖像周圍繪製1px的邊框
imagepng($im);//創建一張PNG格式圖形
imagedestroy($im);//將圖片handle解構,釋於內存空間
$_SESSION["auth_code"]=$str;
?>

index.php | input 緩存

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>captcha</title>
	</head>
	<body>

	</form>
<form action="verify.php" method ="POST">
	<input type = "text" name="verify">
	<img style="cursor:pointer" title="刷新驗證碼" id="refresh" src='captcha.php'   
onclick="document.getElementById('refresh').src='captcha.php?t='+Math.random()"/> 
	<span style="cursor:pointer;color:red" onclick="document.getElementById('refresh').src='captcha.php?t='+Math.random()">refresh</span>
	
	<button type='submit'>肯定</button>  
	



		
</body>
</html>

verify.php session

<?php  
  header('Content-type:text/html;charset=utf-8');  
  session_start();  

  if (strtoupper($_POST['verify']) != $_SESSION['auth_code']) {  
      echo "<script>alert('驗證失敗');</script>"; 
  }  
  else {  
    echo "<script>alert('驗證成功');</script>";
  }  
  $url = "index.php";  
 
  echo "<script>window.location.href='$url'</script>";  
   
?>
相關文章
相關標籤/搜索