验证码实现及简单验证码校对

前端代码:

<?php session_start(); ?>  
<!DOCTYPE html>  
<html>  
<head>  
<meta http-equiv="content-type" content="text/html;charset=utf-8">  
<title>This is a test!</title>  
  
</head>  
<body>  
<form method="post" name="form">  
<input type="text" placeholder="账号"/><br/>  
<input type="password" placeholder="密码"/><br/>  
<input type="text" placeholder="验证码" name="yzm"/>  
<img id="verImg" src="ceshi2.php"/>  
<a href="#" class="change" onclick="changeVer()">点击刷新</a><br/>  
<input type="submit" name="denglu" value="登录"/>  
</form>  
  
  
<script type="text/javascript">  
//刷新验证码  
function changeVer(){  
document.getElementById("verImg").src="ceshi2.php?tmp="+Math.random();  
}  
</script>  
  
<?php  
//验证码的值保存在 验证码 $_SESSION["VerifyCode"]  
      
    if(@$_POST[denglu]){  
        if(@$_POST[yzm]==""){  
            echo "请输入验证码";  
        }  
        else{  
        if(@strtolower($_POST[yzm])==@strtolower($_SESSION["VerifyCode"])){  
            //strtolower()将函数转换成小写 实现不区分大小写  
            echo "验证码输入正确";  
              
              
            }  
            else{  
              
            echo "验证码输入错误";  
            }  
            }  
          
          
    }  
  
?>  
  
</body>  
</html>

php脚本文件验证码的代码如下[ceshi2.php]:

<?php  
session_start();  
//开启session记录验证码数据  
vCode(4, 15);//设置验证码的字符个数和图片基础宽度  
//vCode 字符数目,字体大小,图片宽度、高度  
function vCode($num = 4, $size = 20, $width = 0, $height = 0) {  
!$width && $width = $num * $size * 4 / 5 + 15;  
!$height && $height = $size + 10;  
//设置验证码字符集合  
$str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";  
//保存获取的验证码  
$code = '';  
//随机选取字符  
for ($i = 0; $i < $num; $i++) {  
$code .= $str[mt_rand(0, strlen($str)-1)];  
}  
//创建验证码画布  
$im = imagecreatetruecolor($width, $height);  
//背景色  
$back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100));  
//文本色  
$text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255));  
imagefilledrectangle($im, 0, 0, $width, $height, $back_color);  
// 画干扰线  
for($i = 0;$i < 5;$i++) {  
$font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));  
imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);  
}  
// 画干扰点  
for($i = 0;$i < 50;$i++) {  
$font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));  
imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color);  
}  
//随机旋转角度数组  
$array=array(5,4,3,2,1,0,-1,-2,-3,-4,-5);  
// 输出验证码  
// imagefttext(image, size, angle, x, y, color, fontfile, text)  
@imagefttext($im, $size , array_rand($array), 12, $size + 6, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code);  
$_SESSION["VerifyCode"]=$code;  
//no-cache在每次请求时都会访问服务器  
//max-age在请求1s后再次请求会再次访问服务器,must-revalidate则第一发送请求会访问服务器,之后不会再访问服务器  
// header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");  
header("Cache-Control: no-cache");  
header("Content-type: image/png;charset=gb2312");  
//将图片转化为png格式  
imagepng($im);  
imagedestroy($im);  
}  
?>

This article comes from http://www.chieng.cn, reproduced please specify!
打赏 支付宝打赏 微信打赏

评论

Top