类的代码:

  1. <?php
  2.  
  3. class Captcha
  4. {
  5. private $width;
  6. private $height;
  7. private $codeNum;
  8. private $code;
  9. private $im;
  10.  
  11. function __construct($width=80, $height=20, $codeNum=4)
  12. {
  13. $this->width = $width;
  14. $this->height = $height;
  15. $this->codeNum = $codeNum;
  16. }
  17.  
  18. function showImg()
  19. {
  20. //创建图片
  21. $this->createImg();
  22. //设置干扰元素
  23. $this->setDisturb();
  24. //设置验证码
  25. $this->setCaptcha();
  26. //输出图片
  27. $this->outputImg();
  28. }
  29. //http://www.cnblogs.com/sosoft/
  30. function getCaptcha()
  31. {
  32. return $this->code;
  33. }
  34.  
  35. private function createImg()
  36. {
  37. $this->im = imagecreatetruecolor($this->width, $this->height);
  38. $bgColor = imagecolorallocate($this->im, 0, 0, 0);
  39. imagefill($this->im, 0, 0, $bgColor);
  40. }
  41.  
  42. private function setDisturb()
  43. {
  44. $area = ($this->width * $this->height) / 20;
  45. $disturbNum = ($area > 250) ? 250 : $area;
  46. //加入点干扰
  47. for ($i = 0; $i < $disturbNum; $i++) {
  48. $color = imagecolorallocate($this->im, rand(0, 255), rand(0, 255), rand(0, 255));
  49. imagesetpixel($this->im, rand(1, $this->width - 2), rand(1, $this->height - 2), $color);
  50. }
  51. //加入弧线
  52. for ($i = 0; $i <= 5; $i++) {
  53. $color = imagecolorallocate($this->im, rand(128, 255), rand(125, 255), rand(100, 255));
  54. imagearc($this->im, rand(0, $this->width), rand(0, $this->height), rand(30, 300), rand(20, 200), 50, 30, $color);
  55. }
  56. }
  57.  
  58. private function createCode()
  59. {
  60. $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
  61.  
  62. for ($i = 0; $i < $this->codeNum; $i++) {
  63. $this->code .= $str{rand(0, strlen($str) - 1)};
  64. }
  65. }
  66.  
  67. private function setCaptcha()
  68. {
  69. $this->createCode();
  70.  
  71. for ($i = 0; $i < $this->codeNum; $i++) {
  72. $color = imagecolorallocate($this->im, rand(50, 250), rand(100, 250), rand(128, 250));
  73. $size = rand(floor($this->height / 5), floor($this->height / 3));
  74. $x = floor($this->width / $this->codeNum) * $i + 5;
  75. $y = rand(0, $this->height - 20);
  76. imagechar($this->im, $size, $x, $y, $this->code{$i}, $color);
  77. }
  78. }
  79.  
  80. private function outputImg()
  81. {
  82. if (imagetypes() & IMG_JPG) {
  83. header('Content-type:image/jpeg');
  84. imagejpeg($this->im);
  85. } elseif (imagetypes() & IMG_GIF) {
  86. header('Content-type: image/gif');
  87. imagegif($this->im);
  88. } elseif (imagetype() & IMG_PNG) {
  89. header('Content-type: image/png');
  90. imagepng($this->im);
  91. } else {
  92. die("Don't support image type!");
  93. }
  94. }
  95.  
  96. }
    ?>

使用的一个例子:

  1. <?php
  2. require_once 'captcha.class.php';
  3.  
  4. $captcha = new Captcha(80,30,4);
  5.  
  6. $captcha->showImg();
  7.  
  8. ?>

一个不错的php验证码的类的更多相关文章

  1. 一个不错的php图片处理类EasyPhpThumbnail Class

    EasyPhpThumbnail Class   EasyPhpThumbnail Class用于处理图片操作和生成缩略图.支持GIF.JPG和PNG三种格式. 提供的功能包括:Resize.剪切.旋 ...

  2. 一个漂亮的php验证码类

    一个漂亮的php验证码类(分享)   作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下   直接上代码: 复制代码 代码如下: //验证 ...

  3. C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone

    C# Json反序列化   Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...

  4. 用CIL写程序:定义一个叫“慕容小匹夫”的类

    前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样 ...

  5. Java 验证码工具类

    package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...

  6. datetimepicker一个不错的日历android特效

    datetimepicker一个不错的日历效,选中和选择日历效果都很不错, 实用的时候直接可以把datetimepicker-library这个引入到项目,调用的地方在实现 TimePickerDia ...

  7. 【转】一个不错的eclipse反编译插件

    [转]一个不错的eclipse反编译插件 在CSDN论坛上看到的一个不错的eclipse反编译插件,感觉看起来不错的样子,因而记下,原网址是:http://topic.csdn.net/u/20121 ...

  8. [置顶] ios 一个不错的图片浏览分享框架demo

    demo功能:一个不错的图片浏览分享框架demo.iphone6.1 测试通过.可以浏览图片,保存,微博分享到新浪,腾讯,网易,人人等. 注:(由于各个微博的接口有时候会有调整,不一定能分享成功.只看 ...

  9. 在python3.6下 发明一个类似python3.7 dataclass数据类,不用在 __init__中self.xx

    虽然我用3.6,但我在2.7转3.6时候,把3.3 3.4 3.5 3.6的变化都看了一次,虽然已经忘了哪些变化.同时也关注3.7 3.8的变化,3.7中就有1个数据类印象深刻,因为之前在定义这种类时 ...

随机推荐

  1. Python--命令行参数解析Demo

    写没有操作界面的程序时,最讨厌的就是参数解析问题,尤其是很多参数那种,下面是一个小Demo,拿出来与各位分享: # -*- coding:utf8 -*- import os import datet ...

  2. WPF版的权限管理系统

    好多技术人员都有一个通病,不关注用户的需求,产品的可用性,只看使用的技术的新不新,潮不潮,这就是所谓的技术发烧友. 这段时间,断断续续的开发一个WPF的软件,也拿出来Show一下.要不放在硬盘里就发霉 ...

  3. mssql 小技巧

    代码1:查看sql的执行时间 SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON select * from M ...

  4. IOS 多线程01-线程基础知识

    大部分现代操作系统,包括IOS,都支持执行线程的概念.每个进程可以包含多个线程,他们可以同时运行.如果只有一个处理器核心,操作系统将在所有执行线程之间切换,非常类似于在所有执行线程之间切换.如果拥有多 ...

  5. 关于redis启动流程介绍

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/94.html?1455870894 1. 准备运行环境 * 设置oom h ...

  6. MR原理

    三.MapReduce运行原理 1.Map过程简述: 1)读取数据文件内容,对每一行内容解析成<k1,v1>键值对,每个键值对调用一次map函数 2)编写映射函数处理逻辑,将输入的< ...

  7. Oracle动态执行语句

      一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:D ...

  8. Atitit 图像处理知识点  知识体系 知识图谱

    Atitit 图像处理知识点  知识体系 知识图谱 图像处理知识点 图像处理知识点体系 v2 qb24.xlsx 基本知识图像金字塔op膨胀叠加混合变暗识别与检测分类肤色检测other验证码生成 基本 ...

  9. atitit 短信接口规范与短信解决方案.docx

    atitit 短信接口规范与短信解决方案.docx 1.1. 国内比较著名的短信提供商1 1.2. 短信接口规范1 1.3. 短信sdk构成1 1.4. 短信的实现1 1.5. SmsServiceY ...

  10. Atitit attilax在自然语言处理领域的成果

    Atitit attilax在自然语言处理领域的成果 1.1. 完整的自然语言架构方案(词汇,语法,文字的选型与搭配)1 1.2. 中文分词1 1.3. 全文检索1 1.4. 中文 阿拉伯文 英文的简 ...