PHP GD 生成图片验证码+session获取储存验证码

25048次浏览

我们在做登录的时候,为了防止机器不停的刷和提交,有了登录验证码,相信大家都不陌生,验证码一般有数字和字母加干扰点和干扰线,或者图片验证码,或者汉字验证码。汉字验证码必须要有中文字体,否则不成功。图片验证码一般是事先定义好的图片,给出名称和值,进行验证。下面我们来写一个最常见的字母加数字验证码。

效果图如下:

enter image description here

该验证码技术运用了PHP的CD技术,详细请看:http://www.php.net/manual/zh/book.image.php

后台图片代码如下:

<?php
session_start(); //启动session

$image = imagecreatetruecolor(100,30);//创建一个宽100,高度30的图片
$bgcolor=imagecolorallocate($image,255,255,255);//图片背景是白色
imagefill($image,0,0,$bgcolor);//图片填充白色
//随机数,下面的例子是只是数字的验证码
/**
for($i=0;$i<4;$i++){
  $fontsize=6;
  $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
  $fontcontent=rand(0,9);
  $x=($i*100/4)+ rand(5,10);
  $y=rand(5,10);
  imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
**/
//随机数据,下面的例子是随机数据,包括字母和数字
$captch_code='';
for($i=0;$i<4;$i++){
  $fontsize=6;
  $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
  $data='asdfdfglfg74erf21854hgfhgfhkg4ljkghjtrtywiqpoqpwepdfgvnjytyut12313345645667686797800';
  $fontcontent=substr($data,rand(0,strlen($data)),1);
  $captch_code.=$fontcontent;

  $x=($i*100/4)+ rand(5,10);
  $y=rand(5,10);
  imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION['authcode']=$captch_code;

//随机点,生成干扰点
for($i=0;$i<200;$i++){
  $pointcolor=imagecolorallocate($image,rand(50,120),rand(50,120),rand(50,120));
  imagesetpixel($image,rand(1,99),rand(1,99),$pointcolor);
}
//随机线,生成干扰线
for($i=0;$i<3;$i++){
  $linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
  imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
header("content-type:image/png");
imagepng($image);

imagedestory($image);


?>

前台代码如下:

<?php
   if(isset($_REQUEST['autocode'])){
      session_start();
      if(strtolower($_POST['autocode']) == $_SESSION['authcode']){
       echo '正确';
      }else{
      echo'错误';
      }

   exit();
   }

?>
<!DOCTYPE html>
<html>
  <head>
   <meta chartset="utf-8">
  </head>
  <body>
     <form method="post"  action="form.php">
       <p>验证码图片:<img border="1" src="captcha.php?r="<?php echo rand();?> width="100" height="30"  /></p>

       <p>输入内容:<input type="text" name="autocode" value="" /></p>

    <p><input type="submit"  value="提交" style="padding:6px 20px;"/></p>


     </form>
  </body>


</html>

验证图片点击更换:

  <p>验证码图片:<img border="1" id="capthcha_img" onclick="this.src='captcha.php?r='+Math.random()" src="captcha.php?r="<?php echo rand();?> width="100" height="30"  /> <a href="javascript:void(0)" onclick="document.getElementById('capthcha_img').src='captcha.php?r='+Math.random()">换一个</a></p>

Tags: phpsession验证码

相关文章: