<?php
/**
* 图片验证码类
* 生成图片类型验证码,验证码包含数字和大写字母,session中存放md5加密后的验证码
*
* 使用方法:
* $captcha = new Catpcha();
* $captcha->buildAndExportImage();
*
* 作 者: luojing
* 创建时间: 2013-3-27 上午11:42:12
*/
class Captcha {
private $width;//宽度
private $height; //高度
private $codeNum;//验证码字符数量
private $image;//验证码图像资源
private $sessionKey;//session中保存的名字
private $captcha;//验证码字符串
const charWidth = 10;//单个字符宽度,根据输出字符大小而变
/**
* 创建验证码类,初始化相关参数
* @param $width 图片宽度
* @param $height 图片高度
* @param $codeNum 验证码字符数量
* @param $sessionKey session中保存的名字
*/
function __construct($width = 50, $height = 20, $codeNum = 4, $sessionKey = 'captcha') {
$this->width = $width;
$this->height = $height;
$this->codeNum = $codeNum;
$this->sessionKey = $sessionKey;
//保证最小高度和宽度
if($height < 20) {
$this->height = 20;
}
if($width < ($codeNum * self::charWidth + 10)) {//左右各保留5像素空隙
$this->width = $codeNum * self::charWidth + 10;
}
}
/**
* 构造并输出验证码图片
*/
public function buildAndExportImage() {
$this->createImage();
$this->setDisturb();
$this->setCaptcha();
$this->exportImage();
}
/**
* 构造图像,设置底色
*/
private function createImage() {
//创建图像
$this->image = imagecreatetruecolor($this->width, $this->height);
//创建背景色
$bg = imagecolorallocate($this->image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
//填充背景色
imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $bg);
}
/**
* 设置干扰元素
*/
private function setDisturb() {
//设置干扰点
for($i = 0; $i < 150; $i++) {
$color = imagecolorallocate($this->image, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200));
imagesetpixel($this->image, mt_rand(5, $this->width - 10), mt_rand(5, $this->height - 3), $color);
}
//设置干扰线
for($i = 0; $i < 10; $i++) {
$color = imagecolorallocate($this->image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220));
imagearc($this->image, mt_rand(-10, $this->width), mt_rand(-10, $this->height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $color);
}
//创建边框色
$border = imagecolorallocate($this->image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50));
//画边框
imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border);
}
/**
* 产生并绘制验证码
*/
private function setCaptcha() {
$str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
//生成验证码字符
for($i = 0; $i < $this->codeNum; $i++) {
$this->captcha .= $str{mt_rand(0, strlen($str) - 1)};
}
//绘制验证码
for($i = 0; $i < strlen($this->captcha); $i++) {
$color = imagecolorallocate($this->image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
$x = floor(($this->width - 10)/$this->codeNum);
$x = $x*$i + floor(($x-self::charWidth)/2) + 5;
$y = mt_rand(2, $this->height - 20);
imagechar($this->image, 5, $x, $y, $this->captcha{$i}, $color);
}
}
/*
* 输出图像,验证码保存到session中
*/
private function exportImage() {
if(imagetypes() & IMG_GIF){
header('Content-type:image/gif');
imagegif($this->image);
} else if(imagetypes() & IMG_PNG){
header('Content-type:image/png');
imagepng($this->iamge);
} else if(imagetypes() & IMG_JPEG) {
header('Content-type:image/jpeg');
imagepng($this->iamge);
} else {
imagedestroy($this->image);
die("Don't support image type!");
}
//将验证码信息保存到session中,md5加密
if(!isset($_SESSION)){
session_start();
}
$_SESSION[$this->sessionKey] = md5($this->captcha);
imagedestroy($this->image);
}
function __destruct() {
unset($this->width, $this->height, $this->codeNum,$this->captcha);
}
}
分享到:
相关推荐
本知识点主要围绕“PHP图片处理验证码类”展开,讲解如何在PHP中创建一个验证码类,并实现设置干扰像素、输出随机颜色点以及随机字符串的功能。 首先,`ValidationCode.php`可能是定义验证码类的文件,里面包含了...
PHP图片验证码的实现
首先,让我们详细了解PHP图片验证码(CAPTCHA)的工作原理和实现。图片验证码通常由一串随机生成的字母或数字组成,这些字符扭曲、旋转、模糊,以增加机器识别的难度。在用户界面中,用户需要输入显示的验证码,只有...
总之,PHP图片验证码的实现涉及到图像处理、随机数生成、HTTP头部设置等多个技术点,是网站安全机制中不可或缺的一环。开发者应根据具体需求选择合适的库和方法,同时考虑用户体验和安全性之间的平衡。
PHP图片验证码是一种常用的安全机制,用于防止自动化程序(如机器人)对网站进行恶意操作,如批量注册、垃圾评论等。这种验证码通常由随机生成的一串字符组成,用户在提交表单时需要正确输入显示的字符,以此证明...
php图片验证码,验证,点击图片刷新验证码
验证码类应包含生成验证码字符串、创建验证码图像、验证用户输入与生成的验证码是否一致等功能。为了增加安全性,验证码还可以设置过期时间、添加扭曲效果、使用不同的字体和颜色等。 3. PHP分页类: 在处理大量...
本篇文章将深入探讨PHP验证码类的实现原理、常见类型以及如何创建一个自定义的验证码类。 验证码的基本功能是生成一组随机的、难以由机器识别的文字或数字图像,用户在访问特定服务时需要输入这组字符以证明他们是...
一个PHP生成验证码图片以及进行验证的类 实例如下: 调用实例如下 require 'SecureCode.class.php'; $code=SecureCode::getInstance(); $code->createImage(); $code->stroke(); /* 如果需要保存验证码图片,...
标题 "php+js图片验证码" 描述的是一个使用PHP和JavaScript技术实现的图像验证码系统。在Web开发中,验证码是一种防止自动机器人或者恶意攻击者进行非法操作的安全机制,例如防止批量注册、垃圾评论等。这种验证码...
2. **图像生成**:验证码类会将这些随机字符绘制到一张图片上,图片可以有各种颜色、纹理和扭曲效果,以防止被OCR(光学字符识别)软件轻易识别。 3. **扭曲和干扰线**:为了进一步增加识别难度,验证码类通常会...
"PHP字符扭曲图片验证码"是实现这一功能的一种技术,它利用PHP编程语言生成包含扭曲字符的图片,以此来增加机器识别的难度,同时保持人类用户能够轻松辨认。 PHP验证码的核心在于生成随机字符串,并将其扭曲变形...
本教程将聚焦于PHP如何生成图片验证码,这对于Web开发人员来说是一项基本技能。 首先,我们需要理解验证码的基本原理。验证码通常包含随机生成的一串字符,这些字符可能是字母、数字或者两者的组合,有时还会包含...
验证码类通常包括以下几个关键部分: 1. **随机字符串生成**:验证码通常由一组随机字符组成,这些字符可能包括数字、字母甚至符号。PHP中的`random_string`函数或`mt_rand`可以用来生成这些随机元素。 2. **图像...
- 在PHP验证码类中,可以编写函数随机选择字体文件,如`$font = 'fonts/' . rand(1, count(scandir('fonts')) - 2) . '.ttf';`,确保每次生成的验证码字体不固定,增加破解难度。 3. **验证码的其他安全措施**: ...
验证码类通常包括以下几个核心部分: 1. **随机数生成**:验证码的值通常是随机生成的一串数字或字母,确保每次请求时都不相同。在PHP中,可以使用`rand()`或`mt_rand()`函数来生成随机数,或者结合字符数组来创建...
validatecodeimage 图片验证码类 php
"PHP验证码类"是这样一种工具,它能帮助开发者轻松创建高效且安全的验证码图片。 验证码类的基本功能包括生成随机字符、绘制图像、扭曲字符以增加识别难度、以及验证用户输入的验证码是否与服务器端生成的一致。...
验证码合集,验证码 PHP 语音 图片 多版本
定制化的php验证码类 创建验证码图像: 建立画布(__construct函数) 设置画布背景($this->set_bgcolor();) 获取随机字符串($this->get_randnum ();) 文字写到图片上(imagestring函数)...