一个不错的php验证码的类
类的代码:
- <?php
- class Captcha
- {
- private $width;
- private $height;
- private $codeNum;
- private $code;
- private $im;
- function __construct($width=80, $height=20, $codeNum=4)
- {
- $this->width = $width;
- $this->height = $height;
- $this->codeNum = $codeNum;
- }
- function showImg()
- {
- //创建图片
- $this->createImg();
- //设置干扰元素
- $this->setDisturb();
- //设置验证码
- $this->setCaptcha();
- //输出图片
- $this->outputImg();
- }
- //http://www.cnblogs.com/sosoft/
- function getCaptcha()
- {
- return $this->code;
- }
- private function createImg()
- {
- $this->im = imagecreatetruecolor($this->width, $this->height);
- $bgColor = imagecolorallocate($this->im, 0, 0, 0);
- imagefill($this->im, 0, 0, $bgColor);
- }
- private function setDisturb()
- {
- $area = ($this->width * $this->height) / 20;
- $disturbNum = ($area > 250) ? 250 : $area;
- //加入点干扰
- for ($i = 0; $i < $disturbNum; $i++) {
- $color = imagecolorallocate($this->im, rand(0, 255), rand(0, 255), rand(0, 255));
- imagesetpixel($this->im, rand(1, $this->width - 2), rand(1, $this->height - 2), $color);
- }
- //加入弧线
- for ($i = 0; $i <= 5; $i++) {
- $color = imagecolorallocate($this->im, rand(128, 255), rand(125, 255), rand(100, 255));
- imagearc($this->im, rand(0, $this->width), rand(0, $this->height), rand(30, 300), rand(20, 200), 50, 30, $color);
- }
- }
- private function createCode()
- {
- $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
- for ($i = 0; $i < $this->codeNum; $i++) {
- $this->code .= $str{rand(0, strlen($str) - 1)};
- }
- }
- private function setCaptcha()
- {
- $this->createCode();
- for ($i = 0; $i < $this->codeNum; $i++) {
- $color = imagecolorallocate($this->im, rand(50, 250), rand(100, 250), rand(128, 250));
- $size = rand(floor($this->height / 5), floor($this->height / 3));
- $x = floor($this->width / $this->codeNum) * $i + 5;
- $y = rand(0, $this->height - 20);
- imagechar($this->im, $size, $x, $y, $this->code{$i}, $color);
- }
- }
- private function outputImg()
- {
- if (imagetypes() & IMG_JPG) {
- header('Content-type:image/jpeg');
- imagejpeg($this->im);
- } elseif (imagetypes() & IMG_GIF) {
- header('Content-type: image/gif');
- imagegif($this->im);
- } elseif (imagetype() & IMG_PNG) {
- header('Content-type: image/png');
- imagepng($this->im);
- } else {
- die("Don't support image type!");
- }
- }
- }
?>
使用的一个例子:
- <?php
- require_once 'captcha.class.php';
- $captcha = new Captcha(80,30,4);
- $captcha->showImg();
- ?>
一个不错的php验证码的类的更多相关文章
- 一个不错的php图片处理类EasyPhpThumbnail Class
EasyPhpThumbnail Class EasyPhpThumbnail Class用于处理图片操作和生成缩略图.支持GIF.JPG和PNG三种格式. 提供的功能包括:Resize.剪切.旋 ...
- 一个漂亮的php验证码类
一个漂亮的php验证码类(分享) 作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下 直接上代码: 复制代码 代码如下: //验证 ...
- C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone
C# Json反序列化 Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...
- 用CIL写程序:定义一个叫“慕容小匹夫”的类
前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样 ...
- Java 验证码工具类
package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...
- datetimepicker一个不错的日历android特效
datetimepicker一个不错的日历效,选中和选择日历效果都很不错, 实用的时候直接可以把datetimepicker-library这个引入到项目,调用的地方在实现 TimePickerDia ...
- 【转】一个不错的eclipse反编译插件
[转]一个不错的eclipse反编译插件 在CSDN论坛上看到的一个不错的eclipse反编译插件,感觉看起来不错的样子,因而记下,原网址是:http://topic.csdn.net/u/20121 ...
- [置顶] ios 一个不错的图片浏览分享框架demo
demo功能:一个不错的图片浏览分享框架demo.iphone6.1 测试通过.可以浏览图片,保存,微博分享到新浪,腾讯,网易,人人等. 注:(由于各个微博的接口有时候会有调整,不一定能分享成功.只看 ...
- 在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个数据类印象深刻,因为之前在定义这种类时 ...
随机推荐
- Python--命令行参数解析Demo
写没有操作界面的程序时,最讨厌的就是参数解析问题,尤其是很多参数那种,下面是一个小Demo,拿出来与各位分享: # -*- coding:utf8 -*- import os import datet ...
- WPF版的权限管理系统
好多技术人员都有一个通病,不关注用户的需求,产品的可用性,只看使用的技术的新不新,潮不潮,这就是所谓的技术发烧友. 这段时间,断断续续的开发一个WPF的软件,也拿出来Show一下.要不放在硬盘里就发霉 ...
- mssql 小技巧
代码1:查看sql的执行时间 SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON select * from M ...
- IOS 多线程01-线程基础知识
大部分现代操作系统,包括IOS,都支持执行线程的概念.每个进程可以包含多个线程,他们可以同时运行.如果只有一个处理器核心,操作系统将在所有执行线程之间切换,非常类似于在所有执行线程之间切换.如果拥有多 ...
- 关于redis启动流程介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/94.html?1455870894 1. 准备运行环境 * 设置oom h ...
- MR原理
三.MapReduce运行原理 1.Map过程简述: 1)读取数据文件内容,对每一行内容解析成<k1,v1>键值对,每个键值对调用一次map函数 2)编写映射函数处理逻辑,将输入的< ...
- Oracle动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:D ...
- Atitit 图像处理知识点 知识体系 知识图谱
Atitit 图像处理知识点 知识体系 知识图谱 图像处理知识点 图像处理知识点体系 v2 qb24.xlsx 基本知识图像金字塔op膨胀叠加混合变暗识别与检测分类肤色检测other验证码生成 基本 ...
- atitit 短信接口规范与短信解决方案.docx
atitit 短信接口规范与短信解决方案.docx 1.1. 国内比较著名的短信提供商1 1.2. 短信接口规范1 1.3. 短信sdk构成1 1.4. 短信的实现1 1.5. SmsServiceY ...
- Atitit attilax在自然语言处理领域的成果
Atitit attilax在自然语言处理领域的成果 1.1. 完整的自然语言架构方案(词汇,语法,文字的选型与搭配)1 1.2. 中文分词1 1.3. 全文检索1 1.4. 中文 阿拉伯文 英文的简 ...