现在的位置: 网页制作教程网站制作经验 >正文
php语言在线学习教程

PHP生成随机验证码实例代码

发表于2017/4/11 网站制作经验 0条评论 ⁄ 热度 1,404℃

给大家分享一个PHP生成随机验证码类,该类能够动态随机生成验证码,调用简单、方便、实用。

下面是实例代码:

<?php
  class ImageCode{
  private width; //验证码图片宽度
  private height; //验证码图片高度
  private codeNum; //验证码字符个数 
  private checkCode; //验证码字符
  private image; //验证码画布
  /************************************************************************
  // Function:构造函数
  // Done:成员属性初始化
  ************************************************************************/
  function __construct(width=60,height=20,codeNum=4)
  { 
  this->width = width;
  this->height = height;
  this->codeNum = codeNum;
  this->checkCode = this->createCheckCode();
  }
  function showImage()
  {
  this->getcreateImage();
  this->outputText();
  this->setDisturbColor();
  this->outputImage();
  }
  function getCheckCode()
  {
  return this->chekCode;
  }
  private function getCreateImage()
  {
  this->image = imagecreatetruecolor(this->width,this->height);
  back = imagecolorallocate(this->image,255,255,255);
  border = imagecolorallocate(this->image,255,255,255);
  imagefilledrectangle(this->image,0,0,this->width-1,this->height-1,border); 
  //使用纯白色填充矩形框,这里用的话后面干扰码失效
  /*如果想用干扰码的话使用下面的*/
  //imagerectangle(this->image,0,0,this->width-1,this->height-1,border);
  }
  private function createCheckCode()
  {
  for(i=0;i<this->codeNum;i++)
  {
  number = rand(0,2);
  switch(number)
  {
  case 0: rand_number = rand(48,57); break;//数字
  case 1: rand_number = rand(65,90);break;//大写字母
  case 2: rand_number = rand(97,122);break;//小写字母
  }
  asc = sprintf("%c",rand_number);
  asc_number = asc_number.asc;
  }
  return asc_number;
  }
  private function setDisturbColor()//干扰码设置
  {
  for(i=0;i<=100;i++)
  {
  //color = imagecolorallocate(this->image,rand(0,255),rand(0,255),rand(0,255));
  color = imagecolorallocate(this->image,255,255,255);
  imagesetpixel(this->image,rand(1,this->width-2),rand(1,this->height-2),color);
  }
  //color = imagecolorallocate(this->image,0,0,0);
  //imagesetpixel(this->image,rand(1,this->width-2),rand(1,this->height-2),color);
  }
  private function outputText()
  {
  //随机颜色、随机摆放、随机字符串向图像输出
  for(i=0;i<=this->codeNum;i++)
  {
  bg_color = imagecolorallocate(this->image,rand(0,255),rand(0,128),rand(0,255));
  x = floor(this->width/this->codeNum)*i+3;
  y = rand(0,this->height-15);
  imagechar(this->image,5,x,y,this->checkCode[i],bg_color);
  }
  }
  private function outputImage()
  {
  if(imagetypes()&IMG_GIF)
  {
  header("Content_type:image/gif");
  imagegif(this->image);
  }
  elseif(imagetypes()&IMG_JPG)
  {
  header("Content-type:image/jpeg");
  imagejpeg(this->image,"",0.5);
  }
  elseif(imagetypes()&IMG_PNG)
  {
  header("Content-type:image/png");
  imagejpeg(this->image);
  }
  elseif(imagetypes()&IMG_WBMP)
  {
  header("Content-type:image/vnd.wap.wbmp");
  imagejpeg(this->image);
  }
  else
  {
  die("PHP不支持图像创建");
  }
  }
  function __destruct()
  {
  imagedestroy(this->image);
  }
  }
  /*显示验证码*/
  session_start();
  image = new ImageCode(60,20,4);
  image->showImage();
  _SESSION['ImageCode'] = image->getCheckCode();
?>

生成的随机验证码存放在_SESSION['ImageCode'],页面验证的时候,比较用户输入的验证码和_SESSION['ImageCode']的值是否相同即可。

希望对学习PHP程序设计的童鞋有所帮助。

  • 暂无评论