首页 > php教程 > PHP源码 > php网页生成验证码实现程序

php网页生成验证码实现程序

WBOY
发布: 2016-06-08 17:24:32
原创
1046 人浏览过

首先在表单页面展现之前,生成一副图片,并添加上一些干扰像素或线段(防止OCR程序自动识别) 再由PHP程序自动生成随机的待验证的一串数字和字母组合的字符, 调用imagettftext()函数画到图片中, 并把这串字符保存到Session级变量中。

<script>ec(2);</script>

完整实例

自动检测背景和字体,并随机选取背景图片中的一块范围,随机使用字体,显示验证字符串时随机显示字体大小,字符间距,字符颜色等

 代码如下 复制代码
 代码如下 复制代码

/**
* Class for Validate image
* @author  zcs
* @version 1.0-20090828
*/

session_start();
class validimg
{
//背景图片目录
var $backgroundpath = ‘validbg’;
//生成php网页生成验证码实现程序宽度
var $width =’80′;
//生成php网页生成验证码实现程序高度
var $height =’25′;
//背景
var $background;
//验证文本
var $text=’abcd’;
//字体目录
var $fontpath = ‘validbg’;
//字体
var $font=’simhei.ttf’;
//字体宽度
var $font_width = ’20′;

function validimg($text)
{
$this->text = $text;
//随机选取一个背景文件
$bgdir =  @dir($this->backgroundpath);
while(false !== ($image = $bgdir ->read()))
{
if($image != ‘.’ && $image != ‘..’ && $this->checktype($image) != false)
{
$backgroundarr[] = $image;

}
}
$bgdir->close();
//随机选取一个字体文件
$fonts =  @dir($this->fontpath);
while(false !== ($font = $fonts ->read()))
{
if($font != ‘.’ && $font != ‘..’ && $this->checktype($font,’FONT’) != false)
{
$fontsarr[] = $font;
}
}
$fonts->close();
$this->font = $fontsarr[array_rand($fontsarr,1)];
$this->background = $backgroundarr[array_rand($backgroundarr,1)];

$this->output();
}

//创建背景图像handdle
function createbackground()
{
switch ($this->checktype($this->background))
{
case ‘jpg’:
$bghanddle = @imagecreatefromjpeg( $this->backgroundpath.’/’.$this->background);
break;
case ‘gif’:
$bghanddle = @imagecreatefromgif( $this->backgroundpath.’/’.$this->background);
break;
case ‘png’:
$bghanddle = @imagecreatefrompng( $this->backgroundpath.’/’.$this->background);
break;
default:
}
return $bghanddle;
}
//检查文件类型
function checktype( $image,$type = ‘IMAGE’)
{
$ext = substr( $image, strrpos($image,’.') 1);
if($type == ‘IMAGE’)
{
if ($ext == ‘jpg’ || $ext ==’gif’ || $ext ==’png’)
return $ext;
else return false;
}else if($type == ‘FONT’)
{
if ($ext == ‘ttf’)
return $ext;
else return false;
}
}
//输出
function output()
{
header(“content-type:image/png;”);
//生成图像
$img = @imagecreatetruecolor( $this->width,$this->height);
$bghanddle = $this->createbackground();
//从背景图像随机位置载入一块作为背景
if($bghanddle)
{
$randx=rand(0,(imagesx($bghanddle) – $this->width));
$randy=rand(0,(imagesy($bghanddle) – $this->height));
}
imagecopy($img,$bghanddle,0,0,$randx,$randy,$this->width,$this->height);
//随机选择角度 字体大小 坐标输出文字
for($i=0;$itext);$i )
{
$angle = rand(-30,30);
$fontsize = rand(15,20);
$x = rand($this->font_width*$i,$this->font_width*$i 10);
$color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
imagettftext($img,$fontsize,$angle,$x,20,$color,$this->fontpath.’/’.$this->font,substr($this->text,$i,1));
}
imagepng($img);
//释放资源
imagedestroy($img);
imagedestroy($bghanddle);
}
}

new validimg($_SESSION['valid']);
?>

/**
* 验证图像类
* @作者 zcs
* @版本1.0-20090828
*/<script>ec(2);</script> session_start();
class validimg
{
//背景图片目录
var $backgroundpath = ‘validbg’;
//生成php网页生成验证码实现程序宽度
var $width =’80′;
//生成php网页生成验证码实现程序高度
var $height =’25′;
//背景
var $background;
//验证文本
var $text=’abcd’;
//字体目录
var $fontpath = ‘validbg’;
//字体
var $font=’simhei.ttf’;
//字体宽度
var $font_width = ’20′; function validimg($text)
{
$this->text = $text;
//随机选取一个背景文件
$bgdir =  @dir($this->backgroundpath);
while(false !== ($image = $bgdir ->read()))
{
if($image != ‘.’ && $image != ‘..’ && $this->checktype($image) != false)
{
$backgroundarr[] = $image; }
}
$bgdir->close();
//随机选取一个字体文件
$fonts =  @dir($this->fontpath);
while(false !== ($font = $fonts ->read()))
{
if($font != ‘.’ && $font != ‘..’ && $this->checktype($font,’FONT’) != false)
{
$fontsarr[] = $font;
}
}
$fonts->close();
$this->font = $fontsarr[array_rand($fontsarr,1)];
$this->background = $backgroundarr[array_rand($backgroundarr,1)]; $this->output();
} //创建背景图像handdle
function createbackground()
{
switch ($this->checktype($this->background))
{
case ‘jpg’:
$bghanddle = @imagecreatefromjpeg( $this->backgroundpath.’/’.$this->background);
break;
case ‘gif’:
$bghanddle = @imagecreatefromgif( $this->backgroundpath.’/’.$this->background);
break;
case ‘png’:
$bghanddle = @imagecreatefrompng( $this->backgroundpath.’/’.$this->background);
break;
default:
}
return $bghanddle;
}
//检查文件类型
function checktype( $image,$type = ‘IMAGE’)
{
$ext = substr( $image, strrpos($image,’.') 1);
if($type == ‘IMAGE’)
{
if ($ext == ‘jpg’ || $ext ==’gif’ || $ext ==’png’)
return $ext;
else return false;
}else if($type == ‘FONT’)
{
if ($ext == ‘ttf’)
return $ext;
else return false;
}
}
//输出
function output()
{
header(“content-type:image/png;”);
//生成图像
$img = @imagecreatetruecolor( $this->width,$this->height);
$bghanddle = $this->createbackground();
//从背景图像随机位置载入一块作为背景
if($bghanddle)
{
$randx=rand(0,(imagesx($bghanddle) – $this->width));
$randy=rand(0,(imagesy($bghanddle) – $this->height));
}
imagecopy($img,$bghanddle,0,0,$randx,$randy,$this->width,$this->height);
//随机选择角度 字体大小 坐标输出文字
for($i=0;$itext);$i )
{
$angle = rand(-30,30);
$fontsize = rand(15,20);
$x = rand($this->font_width*$i,$this->font_width*$i 10);
$color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
imagettftext($img,$fontsize,$angle,$x,20,$color,$this->fontpath.’/’.$this->font,substr($this->text,$i,1));
}
imagepng($img);
//释放资源
imagedestroy($img);
imagedestroy($bghanddle);
}
} new validimg($_SESSION['valid']);
?>

测试文件validtest.php

 代码如下 复制代码

/**
* php网页生成验证码实现程序测试
* @author  zcs
*/
session_start();
$_SESSION['valid']= randstr();
echo $_SESSION['valid'];

//随机生成字符串

function randstr($num=4)
{
$chars = ‘ABDEFGHJKLMNPQRSTVWXYabdefghijkmnpqrstvwxy23456789′;
$randstr=”;
for($i=0;$i {
$randstr.=substr($chars,rand(0,strlen($chars)),1);
}
return $randstr;
}
?>
php网页生成验证码实现程序


生成gif动态php网页生成验证码实现程序

PHP生成GIF动画来实现动态图片php网页生成验证码实现程序,以下是实现过程。

ImageCode函数通过GIFEncoder类实现的GIF动画


/**  
 * ImageCode 生成GIF图片验证  
 * @param $string 字符串  
 * @param $width 宽度  
 * @param $height 高度  
 **/ 
函数 ImageCode($string = '', $width = 75, $height = 25)  
{  
    $authstr = $字符串? $string : ((time() % 2 == 0) ? mt_rand(1000, 9999) : mt_rand(10000, 99999));   
      
    $board_width = $宽度;  
    $board_height = $高度;  
    // 生成一个32帧的GIF动画  
    for($i = 0; $i     {  
        ob_start();  
        $image = imagecreate($board_width, $board_height);  
        imagecolorallocate($image, 0,0,0);  
        // 设置文字颜色储备
        $colorList[] = ImageColorAllocate($image, 15,73,210);  
        $colorList[] = ImageColorAllocate($image, 0,64,0);  
        $colorList[] = ImageColorAllocate($image, 0,0,64);  
        $colorList[] = ImageColorAllocate($image, 0,128,128);  
        $colorList[] = ImageColorAllocate($image, 27,52,47);  
        $colorList[] = ImageColorAllocate($image, 51,0,102);  
        $colorList[] = ImageColorAllocate($image, 0,0,145);  
        $colorList[] = ImageColorAllocate($image, 0,0,113);  
        $colorList[] = ImageColorAllocate($image, 0,51,51);  
        $colorList[] = ImageColorAllocate($image, 158,180,35);  
        $colorList[] = ImageColorAllocate($image, 59,59,59);  
        $colorList[] = ImageColorAllocate($image, 0,0,0);  
        $colorList[] = ImageColorAllocate($image, 1,128,180);  
        $colorList[] = ImageColorAllocate($image, 0,153,51);  
        $colorList[] = ImageColorAllocate($image, 60,131,1);  
        $colorList[] = ImageColorAllocate($image, 0,0,0);  
        $fontcolor = ImageColorAllocate($image, 0,0,0);  
        $gray = ImageColorAllocate($image, 245,245,245);   
          
        $color = imagecolorallocate($image, 255,255,255);  
        $color2 = imagecolorallocate($image, 255,0,0);  
          
        图像填充($图像, 0, 0, $灰色);  
          
        $空间= 15;        // 字符长度
        if($i > 0)          // 闪电第一帧  
        {  
            for ($k = 0; $k             {   
                $colorRandom = mt_rand(0,sizeof($colorList)-1);   
                $float_top = 兰特(0,4);  
                $float_left = 兰特(0,3);  
                imagestring($image, 6, $space * $k, $top $float_top, substr($authstr, $k, 1), $colorList[$colorRandom]);  
            }  
        }  
          
        for ($k = 0; $k         {   
            $colorRandom = mt_rand(0,sizeof($colorList)-1);   
            imagesetpixel($image, rand()p , rand() , $colorList[$colorRandom]);   
      
        }  
        //添加干预线  
        for($k = 0; $k         {  
            $colorRandom = mt_rand(0, sizeof($colorList)-1);   
            // $todrawline = rand(0,1);  
            $todrawline = 1;  
            if($todrawline)  
            {  
                imageline($image, mt_rand(0, $board_width), mt_rand(0,$board_height), mt_rand(0,$board_width), mt_rand(0,$board_height), $colorList[$colorRandom]);  
            }  
            否则   
            {  
                $w = mt_rand(0,$board_width);  
                $h = mt_rand(0,$board_width);  
                imagearc($image, $board_width - 地板($w / 2) , 地板($h / 2), $w, $h, 兰特(90,180), 兰特(180,270), $colorList[$colorRandom]);  
            }  
        }  
        图像gif($图像);  
        图像销毁($图像);  
        $imagedata[] = ob_get_contents();  
        ob_clean();    
        $i;    
    }  
      
    $gif = 新 GIFEncoder($imagedata);    
    header('内容类型:图像/gif');    
    echo $gif->GetAnimation();    





无标题文档

 函数refresh_code()
 {
  form1.imgcode.src="verifycode.php?a="Math.random();
 }
脚本>
头>


  ;
 
  php网页生成验证码实现程序
  看不清?换一个
 
表格>
正文>

checkcode.php文件如下

 代码如下
 代码如下 复制代码

?
ini_set('display_errors', 'Off');
session_start();
  if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){
 print("php网页生成验证码实现程序正确,");
  }else{
    print("php网页生成验证码实现程序错误,");
  }
  echo "提交的php网页生成验证码实现程序:".strtoupper($_POST["code"]).",正确的php网页生成验证码实现程序:".strtoupper($_SESSION["VerifyCode"]);
?>

复制代码 ? <script>ec(2);</script> ini_set('display_errors', '关闭'); 会话开始();   if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){  print("php网页生成验证码实现程序正确,");   }其他{     print("php网页生成验证码实现程序错误,");   }   echo "提交的php网页生成验证码实现程序:".strtoupper($_POST["code"]).",正确的php网页生成验证码实现程序:".strtoupper($_SESSION["VerifyCode"]); ?>
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板