前端页面index.php
<?php
header('content-type:text/html;charset=utf-8');
if(isset($_POST['dosubmit'])){
session_start();
if(strtoupper($_SESSION['code']) == strtoupper($_POST['code'])){
echo '输入成功!<br/>';
}else{
echo '输入不对<br/>';
}
}
?>
<form action="index.php" method="post">
用户名:<input type="text" name="username" value=""/><br/>
标题:<input type="text" name="title" value=""/><br/>
内容:<textarea name="content" cols="40" rows="4"></textarea><br/>
验证码:<input type="text" size="4" name="code"><img src="test.php" onclick ="this.src='test.php?'+Math.random()"/><br/>
<input type="submit" name="dosubmit" value="留言"/>
</form>
生成验证码图片test.php
<?php
//开启session
session_start();
require 'print.php';//导入验证码类文件
$vcode =new Vcode(80,30,4);//实例化验证码类
//将验证码放到服务器自己的空间保存一份
$_SESSION['code'] = $vcode->getCode();
//将验证码的图片输出
$vcode->outimg();//调用方法
验证码类 print.php
<?php
class Vcode{
private $width; //宽
private $heigth; //高
private $num; //数量
private $code; //验证码
private $img; //图像资源
//构造方法
function __construct($width=80,$height=25,$num=4){
$this->width = $width;
$this->heigth = $height;
$this->num = $num;
$this->code = $this->createCode();
}
//获取字符的验证码
function getCode(){
return $this->code;
}
//输出验证码图形
function outimg(){
//创建背景 颜色 大小 边框
$this->createBack();
//画字 大小 字体颜色
$this->outString();
//干扰元素 点 线条
$this->setDisturb();
//输出图像
$this->printImg();
}
//创建背景
private function createBack(){
//创建资源
$this->img = imagecreatetruecolor($this->width, $this->heigth);
//设置随机背景颜色
$bgcolor = imagecolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255));
//填充背景色
imagefill($this->img, 0, 0, $bgcolor);
//画矩形
$bordercolor = imagecolorallocate($this->img, 0, 0, 0);
imagerectangle($this->img, 0, 0, $this->width-1, $this->heigth-1, $bordercolor);
}
//画字
private function outString(){
for($i=0;$i<$this->num;$i++){
$color = imagecolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128));
$font = rand(3,5);
$x = 3 + ($this->width/$this->num)*$i;
$y = rand(1, 5);
imagestring($this->img, $font,$x, $y, $this->code{$i}, $color);
}
}
//设置干扰元素
private function setDisturb(){
//加上点数
for($i=0;$i<100;$i++){
$color = imagecolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255));
imagesetpixel($this->img, rand(1, $this->width-2), rand(1, $this->heigth-2), $color);
}
//加上线条
for($i=0;$i<10;$i++){
$color = imagecolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255));
imagearc($this->img, rand(-10, $this->width+10), rand(-10, $this->heigth+10), rand(30, 300), rand(30, 300), 55, 44, $color);
}
}
//输出图像
private function printImg(){
// header("Content-Type:image/jpeg");
// imagejpeg($this->img);
if(imagetypes() & IMG_GIF){
header("Content-Type:image/gif");
imagejpeg($this->img);
}elseif(imagetypes() & IMG_JPEG){
header("Content-Type:image/jpeg");
imagejpeg($this->img);
}elseif(imagetypes() & IMG_JPG){
header("Content-Type:image/jpg");
imagejpeg($this->img);
}elseif(imagetypes() & IMG_PNG){
header("Content-Type:image/png");
imagejpeg($this->img);
}
}
//生成验证码
private function createCode(){
$codes = "23456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
$code = "";
for($i=0;$i<$this->num;$i++){
$code .=$codes{rand(0,strlen($codes)-1)};
}
return $code;
}
//释放图像资源
function __destruct(){
imagedestroy($this->img);
}
}