日期:2014-05-16  浏览次数:20370 次

php验证码和不能正常显示解决方法

效果如图:

?

文件都放到了同一文件夹下。

?

CreateImage.class.php

<?php
class ValidationCode
{


	private $width,$height,$codenum;
	public $checkcode;     //产生的验证码
	private $checkimage;    //验证码图片
	private $disturbColor = ''; //干扰像素
	
	function __construct($width='80',$height='20',$codenum='4')
	{
	   $this->width=$width;
	   $this->height=$height;
	   $this->codenum=$codenum;
	}
	
	function outImg()
	{
	   //输出头
	   $this->outFileHeader();
	   //产生验证码
	   $this->createCode();
	
	   //产生图片
	   $this->createImage();
	   //设置干扰像素
	   $this->setDisturbColor();
	   //往图片上写验证码
	   $this->writeCheckCodeToImage();
	   imagepng($this->checkimage);
	   imagedestroy($this->checkimage);
	}
	
	private function outFileHeader()
	{
	   header ('Content-type: image/png');
	}
	
	private function createCode()
	{
	   $this->checkcode = strtoupper(substr(md5(rand()),0,$this->codenum));
	}
	
	private function createImage()
	{
	   $this->checkimage = @imagecreate($this->width,$this->height);
	   $back = imagecolorallocate($this->checkimage,255,255,255);
	   $border = imagecolorallocate($this->checkimage,0,0,0);  
	   imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底
	   imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border);   // 黑色边框
	}
	
	private function setDisturbColor()
	{
	   for ($i=0;$i<=200;$i++)
	   {
		$this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255));
		imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor);
	   }
	}
	
	private function writeCheckCodeToImage()
	{
	   for ($i=0;$i<=$this->codenum;$i++)
	   {
		$bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255));
		$x = floor($this->width/$this->codenum)*$i;
		$y = rand(0,$this->height-15);
		imagechar ($this->checkimage, rand(5,8), $x, $y, $this->checkcode[$i], $bg_color);
	   }
	}
	
	function __destruct()
	{
	   unset($this->width,$this->height,$this->codenum);
	}
}

?

checks.php

?

<?php
ini_set('display_errors','off');
session_start();
header("content-type:image/png");  	  //设置创建图像的格式
$image_width=70;                      //设置图像宽度
$image_height=18;                     //设置图像高度
srand(microtime()*100000);         	  //设置随机数的种子
for($i=0;$i<4;$i++){                  //循环输出一个4位的随机数
   $new_number.=dechex(rand(0,15));
}
$_SESSION[check_checks]=$new_number;    //将获取的随机数验证码写入到SESSION变量中     

$num_image=imagecreate($image_width,$image_height);  //创建一个画布
imagecolorallocate($num_image,255,255,255);     	 //设置画布的颜色
for($i=0;$i<strlen($_SESSION[check_checks]);$i++){  //循环读取SESSION变量中的验证码
   $font=mt_rand(3,5);                            	//设置随机的字体
   $x=mt_rand(1,8)+$image_width*$i/4;               //设置随机字符所在位置的X坐标
   $y=mt_rand(1,$image_height/4);                   //设置随机字符所在位置的Y坐标
   $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));  	 //设置字符的颜色
   imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color);				     //水平输出字符
}
imagepng($num_image);      			//生成PNG格式的图像
imagedestroy($num_image);  			//释放图像资源
?>

?

index.php

?

<?php
header("content-type:text/html; charset=utf-8");
session_start();
if(!empty($_POST["Submit"])){
$checks=$_POST["checks"];
if($checks==""){
echo "<script> alert('验证码不能为空');window.location.href='index.php';</script>";
}
if($checks==$_SESSION[check_checks]){
	echo "<script> alert('用户登录成功!');window.location.href='index.php';</script>";
}else{
	echo