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