效果如圖:

檔案都放到了同一檔案夾下。
************************************容易出現的問題*************
1.未開啟php_gd2.dll 去php.ini将其前面的“ ;”去掉
2.上面的checks.php中<?前面有空格或者内容
3.字元編碼改為統一的
4.最容易忽略的一點:
5.如果copy代碼到你的項目中圖檔顯示為×,檢查你的checks.php放置路徑
你本機上的環境是将報錯提示全部打開的,是以在輸出時有系統的未定義提示資訊也跟着一起輸出了,這樣生成的圖檔肯定就不正常了,方法有兩,在ValidationCode.php和checks.php檔案開頭加上ini_set('display_errors', 'Off'); 就ok了
**********************************************************
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 "<script> alert('您輸入的驗證碼不正确!');window.location.href='index.php';</script>";
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>rand函數的應用</title>
<style type="text/css">
<!--
.STYLE1 {
font-size: 12px;
color: #FFFFFF;
font-weight: bold;
}
.style2 {font-weight: bold; font-size: 12px;}
-->
</style>
</head>
<body>
<form name="form" method="post" action="">
<input type="hidden" name="Submit" id="Submit" value="1" />
<table width="1003" cellspacing="0" cellpadding="0">
<tr>
<td width="168" height="169" background="images/index_01.gif"> </td>
<td width="685" background="images/index_02.gif"> </td>
<td width="150" background="images/index_03.gif"> </td>
</tr>
<tr>
<td width="168" height="311" background="images/index_04.gif"> </td>
<td background="images/index_05.gif"><table width="675" height="169" cellpadding="0" cellspacing="0">
<tr>
<td height="43" align="center" valign="baseline"> </td>
<td align="center" valign="middle"> </td>
<td align="center" valign="baseline"> </td>
</tr>
<tr>
<td width="382" height="24" align="center" valign="baseline"> </td>
<td width="207" height="24" valign="middle"><span class="style2">使用者名</span><span class="STYLE1">
<input name="txt_user" id="txt_user" style="height:20px " size="10">
</span></td>
<td width="86" height="24" align="center" valign="baseline"> </td>
</tr>
<tr>
<td height="24" align="center" valign="baseline"> </td>
<td height="24" valign="middle"><span class="style2">密碼</span><span class="STYLE1">
<input name="txt_pwd" type="password" id="txt_pwd" style="FONT-SIZE: 9pt; height:20px" size="10">
</span></td>
<td height="24" align="center" valign="baseline"> </td>
</tr>
<tr>
<td height="24" align="center" valign="baseline"> </td>
<td height="24" valign="middle"><span class="style2">驗證碼</span><span class="STYLE1">
<input name="checks" size="6" style="height:20px ">
<img src="./checks.php" width="70" height="18" align="bottom"></span> </td>
<td height="24" align="center" valign="baseline"> </td>
</tr>
<tr>
<td height="40" align="center" valign="baseline"> </td>
<td align="center" valign="baseline"> <input type="submit" id="Submit" name="Submit" value="登入" /></td>
<td align="center" valign="baseline"> </td>
</tr>
</table></td>
<td background="images/index_06.gif"> </td>
</tr>
<tr>
<td height="100"> </td>
<td> </td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>