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>"; ?>