码迷,mamicode.com
首页 > Web开发 > 详细

php验证码处理

时间:2015-10-15 14:12:41      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

//基本步骤
1,先创建一张指定宽度和高度的一张验证码图片 imagecreatetruecolor()
2,给验证码图片添加背景颜色 和文字颜色 imagecolorallocate()
3, 在指定图片上面,画一个矩形 imagefilledrectangle()
4, 获取随机数  (定义一个函数) get_rand_str()
  1,定义一个字符串
  2,将上面的字符串 打乱  str_shuffle()
  3,并且从这个打乱的字符串当中去截取一部分内容 substr()
  4,把截取出来的字符串转化成小写字母 strtolower()
  5, 将这个字符串 return
5,将随机数写入到这个图片里面去 imagestring()
6,防止别人去恶意刷我们的验证码 可以在这个图片上面加上一些点 imagesetpixel()
7,开启session会话  将我们的验证码 存储到session当中与我们表单当中输入的验证码进行匹配
8,输入图片的 头信息 和 图片资源 删除 header("Content-Type:image/png"); imagepng($img); imagedestroy($img);
9,在登录界面 获取表单输入的验证码  和 我们session当中的验证码进行对比 如果正确就跳转登录界面 否则重新输入
 
   html:
 
       <img src="img_code.php" />
 
   img_code.php
 
      //处理随机字符函数
         function get_rand_str($length = 4){
          $chars = ‘123456789ABCDEFGHJKLMNPQRSTUVWXYZ‘;
          $str = str_shuffle($chars); // 随机打乱一个字符串
          $str = substr($str,0,$length);
          $str = strtolower($str);
          return $str;
         }
 
      $width = 45;   //缩略图宽度
      $height = 18;  //缩略图高度
 
      $img = imagecreatetruecolor($width,$height);  // 新建一个真彩色图像
       
      //imagecolorallocate()  为一幅图像分配颜色
      /*
      *$img  为哪幅图分配颜色
      *74 147 223 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制
      */
      $backgroundcolor = imagecolorallocate($img,74,147,223);  //背景颜色
 
 
      $textcolor = imagecolorallocate($img,255,255,255);   //文字颜色
 
      //imagefilledrectangle — 画一矩形并填充
      /*
      * $img  图片资源
      * 0,0,$width,height  分别为矩形的坐标
      * $backgroundcolor 表示填充的颜色
      */
      imagefilledrectangle($img,0,0,$width,height,$backgroundcolor);
 
 
      $get_code = get_rand_str();  //获取随机数
       
      /*
      水平地画一行字符串
      imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
      imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)
      如果 font 是 1,2,3,4 或 5,则使用内置字体。
      */
      imagestring($img,5,6,1,$get_code,$textcolors);
 
       
      //在图片当中去画一些点 防止有人而已破解验证码
 
      //imagesetpixel — 画一个单一像素
      /*
      *imagesetpixel ( resource $image , int $x , int $y , int $color )
      *imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。
      */
      for($i=0;$i<=20;$i++){
        $x = mt_rand(0,$width);
        $y = mt_rand(0,$height);
        imagesetpixel($img,$x,$y,imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
      }
 
      session_start();  //开启session会话控制将验证码缓存
      $_SESSION[‘imgcode‘] = $get_code//把生成的随机数放到session里面的一个变量当中
 
      header("Content-Type:image/png");
      imagepng($img);   //在浏览器上面输出一张图片
      imagedestroy($img);  //销毁 图片

php验证码处理

标签:

原文地址:http://www.cnblogs.com/jacko/p/4882073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!