下载JBLOG 1.5.2 基于PHP+MySQL的博客程序
上一篇:JBLOG 更新日志! 下一篇:佩服

PHP生成验证码实例!

分类:技术学习  |  时间:2008-04-27 15:56  |  阅读:1373人/次  |  标签:PHP验证码

今天花了些时间研究了如何用PHP生成验证码。主要是学习GD库的图像处理函数。只要熟悉了这些函数,利用PHP对图像进行操作还是挺方便的。下面是我写的生成验证码的实例代码,各个步骤都写上注释了,相关的函数请查阅手册。最终的效果还是不错的o(∩_∩)o...如果你有更好的想法,欢迎与我交流!

PHP代码
  1. <?php   
  2. //-------------------------------------   
  3. // 文件说明:生成验证码   
  4. // 文件作者:Jesse Lee   
  5. // 作者主页:http://www.lisijie.com.cn   
  6. // 最后更新:2008-4-27   
  7. //-------------------------------------   
  8.   
  9. session_start();   
  10. //不存在imageCreate函数则认为当前环境不支持GD库   
  11. if (function_exists('imagecreate')) {   
  12.     //产生4个字符的随机字符串作为验证码   
  13.     $str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";   
  14.     $code = array();   
  15.     for ($i=0; $i<4; $i++) {   
  16.         $code[] = $str[mt_rand(0,strlen($str)-1)];   
  17.     }   
  18.     //将验证码写入到Session,忽略大小写   
  19.     $_SESSION['vdcode'] = strtolower(implode('',$code));   
  20.   
  21.     $width = 50;    //图片宽度   
  22.     $height = 20;   //图片高度   
  23.   
  24.     $im = ImageCreate($width,$height);  //创建图形   
  25.     ImageColorAllocate($im,255,255,255); //填充背景颜色为白色   
  26.   
  27.     //用淡色给图形添加杂色   
  28.     for ($i=0; $i<100; $i++) {   
  29.         $pxcolor = ImageColorAllocate($im,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));   
  30.         ImageSetPixel($im,mt_rand(0,$width),mt_rand(0,$height),$pxcolor);   
  31.     }   
  32.   
  33.     //用深色调绘制边框   
  34.     $bordercolor = ImageColorAllocate($im,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));   
  35.     ImageRectangle($im,0,0,$width-1,$height-1,$bordercolor);   
  36.   
  37.     //用比较明显的颜色写上验证码文字   
  38.     $offset = 5;   
  39.     foreach ($code as $char) {   
  40.         $textcolor = ImageColorAllocate($im,mt_rand(0,250),mt_rand(0,150),mt_rand(0,250));   
  41.         ImageChar($im,5,$offset,2,$char,$textcolor);   
  42.         $offset += 10;   
  43.     }   
  44.   
  45.     //禁止缓存   
  46.     header("pragma:no-cache\r\n");   
  47.     header("Cache-Control:no-cache\r\n");   
  48.     header("Expires:0\r\n");   
  49.     //检查系统支持的文件类型,优先级为PNG->JPEG->GIF   
  50.     if (ImageTypes() & IMG_PNG) {   
  51.         header('Content-Type:image/png');   
  52.         ImagePNG($im);   
  53.     } elseif (ImageTypes() & IMG_JPEG) {   
  54.         header('Content-Type:image/jpeg');   
  55.         ImageJPEG($im);   
  56.     } else {   
  57.         header('Content-Type:image/gif');   
  58.         ImageGif($im);   
  59.     }   
  60. else {   
  61.     //不支持GD库,则输出默认验证码ABCD   
  62.     $_SESSION['vdcode'] = 'abcd';   
  63.     header('Content-Type:image/jpeg');   
  64.     $fp = fopen('vdcode.jpg','rb');   
  65.     echo fread($fp,filesize('vdcode.jpg'));   
  66.     fclose($fp);   
  67. }   
  68. ?>  

不支持GD库的情况下输出的图片

本站提供网站建设/程序开发/模板定制服务,价格从优,在线交谈点击这里给我发消息

6条评论 关于 “PHP生成验证码实例!”

  1. avatar
    沙发
    [回复] 1325 发表于: May 4th, 2008 at 16:00 pm

    学习

  2. avatar
    板凳
    [回复] 托咪 发表于: May 6th, 2008 at 10:56 am

    以后会常来的,常交流,你的有些文章我很喜欢。

  3. avatar
    地板
    [回复] 菜鸟 发表于: July 21st, 2008 at 8:37 am

    请问PHP中怎么使用验证码,该添加在哪里呢?能不能告诉我啊~~~~~~菜鸟。===我

  4. avatar
    4
    [回复] Jesse 发表于: July 21st, 2008 at 9:52 am

    引用 菜鸟 的发言:
    请问PHP中怎么使用验证码,该添加在哪里呢?能不能告诉我啊~~~~~~菜鸟。===我
    直接把代码拷贝到一个PHP文件就行了,如code.php。要用的时候插入:<img src="code.php" />,相当于插入一张图片,只是扩展名是php。

  5. avatar
    5
    [回复] 菜鸟 发表于: July 21st, 2008 at 10:40 am

    引用 Jesse 的发言:
    引用 菜鸟 的发言:
    请问PHP中怎么使用验证码,该添加在哪里呢?能不能告诉我啊~~~~~~菜鸟。===我
    直接把代码拷贝到一个PHP文件就行了,如code.php。要用的时候插入:<img src="code.php" />,相当于插入一张图片,只是扩展名是php。
    那么请问,如何判断用户输入的是不是右方所显示的验证码呢。。。该怎么添加呢。麻烦您了

    云影 回复于 2009-04-01 20:54
    avatar
    将生成的注册码存入$_SESSION中就OK了。

发表您的评论

 

点击换一张验证码