这是个验证码类,我现在设置的大小是90*30的,大家可以根据需要具体修改,不过,修改了图片大小以后,需要根据情况具体修改些。代码说明
// 绘验证码
$code = array(); // 验证码
$codeNX =-20; // 验证码第N个字符的左边距,如果图片大小变化,需要修改
for ($i = 0; $i<self::$length; $i++) {
$code[$i] = self::$codeSet[mt_rand(0, 27)];
$codeNX += mt_rand(self::$fontSize, self::$fontSize);
// 写一个验证码字符,具体修改看这个函数的功能
imagettftext(self::$_image, self::$fontSize*0.65, mt_rand(-40, 40), $codeNX, self::$fontSize, self::Getcolor(), $ttf, $code[$i]);
//imagettftext()中self::$fontSize大小修改,改变字母上下的幅度,具体可以这样self::$fontSize*0.9,
}
<?php
/**
* 安全验证码
*
* 安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码
*
*/
class Authcode {
/**
* 验证码的session的下标
*
* @var string
*/
public static $seKey = 'authcode';
public static $expire = 3000; // 验证码过期时间(s)
/**
* 验证码中使用的字符,01IO容易混淆,建议不用
*
* @var string
*/
public static $codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';
public static $fontSize = 20; // 验证码字体大小(px)
public static $useCurve = true; // 是否画混淆曲线
public static $useNoise = true; // 是否添加杂点
public static $imageH = 25; // 验证码图片宽
public static $imageW = 75; // 验证码图片长
public static $length = 4; // 验证码位数
public static $font = 1; //选择字体
protected static $_image = null; // 验证码图片实例
protected static $_color = null; // 验证码字体颜色
/**
* 验证码字体颜色,可以设定为固定,也可以随机,可以所有为一个颜色也可以每个字符为一个颜色
*
*/
public static function Getcolor(){
$fontcolor = imagecolorallocate(self::$_image, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));
return $fontcolor;
}
/*
* 可以根据自己需要来添加或者减少,也可以指定单一的背景颜色
*/
public static function Background(){
$color = array(
array(240,255,255),
array(245,245,245),
array(255,248,220),
array(252,230,201),
array(240,255,240),
array(250,255,240),
array(250,240,230),
array(255,245,238),
array(255,250,250)
);
$m = rand(0,5);
imagecolorallocate(self::$_image, $color[$m][0], $color[$m][1], $color[$m][2]);
}
/**
* 输出验证码并把验证码的值保存的session中
* 验证码保存到session的格式为: $_SESSION[self::$seKey] = array('code' => '验证码值', 'time' => '验证码创建时间');
*/
public static function Build() {
// 图片宽(px)
self::$imageW || self::$imageW = self::$length * self::$fontSize + self::$fontSize;
// 图片高(px)
self::$imageH || self::$imageH = self::$fontSize * 3;
// 建立一幅 self::$imageW x self::$imageH 的图像
self::$_image = imagecreate(self::$imageW, self::$imageH);
// 设置背景
self::Background();
// 验证码使用字体
$ttf = 'style/images/' . self::$font . '.ttf';
if (self::$useNoise) {
// 绘杂点
self::writeNoise();
}
// 绘验证码
$code = array(); // 验证码
$codeNX =-20; // 验证码第N个字符的左边距
for ($i = 0; $i<self::$length; $i++) {
$code[$i] = self::$codeSet[mt_rand(0, 27)];
$codeNX += mt_rand(self::$fontSize, self::$fontSize);
// 写一个验证码字符,具体修改看这个函数的功能
imagettftext(self::$_image, self::$fontSize*0.6, mt_rand(-40, 40), $codeNX, self::$fontSize*0.9, self::Getcolor(), $ttf, $code[$i]);
}
// 保存验证码
// isset($_SESSION) || session_start();
$_SESSION[self::$seKey] = join('', $code); // 把校验码保存到session
$_SESSION['out_time'] = time(); // 验证码创建时间
header('Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header("content-type: image/png");
// 输出图像
imagepng(self::$_image);
imagedestroy(self::$_image);
}
/**
* 画杂点
* 往图片上写不同颜色的字母或数字
*/
protected static function writeNoise() {
for($i = 0; $i < 5; $i++){
//杂点颜色
$noiseColor = imagecolorallocate(
self::$_image,
mt_rand(100,200),
mt_rand(100,200),
mt_rand(100,200)
);
for($j = 0; $j < 3; $j++) {
// 绘杂点($j<? 来调整杂点个数)
imagestring(
self::$_image,
3, //背景字体的大小
mt_rand(-5, self::$imageW),
mt_rand(-5, self::$imageH),
self::$codeSet[mt_rand(1, 27)], // 杂点文本为随机的字母或数字
$noiseColor
);
}
}
}
/**
* 验证验证码是否正确
*
* @param string $code 用户验证码
* @param bool 用户验证码是否正确
*/
public static function check($code) {
$code = strtoupper($code);
// 验证码不能为空
if(empty($code) || empty($_SESSION[self::$seKey])) {
return false;
}
// session 过期
if(time() - $_SESSION['out_time'] > self::$expire) {
unset($_SESSION[self::$seKey]);
return false;
}
if($code == $_SESSION[self::$seKey]) {
return true;
}
return false;
}
}
分享到:
相关推荐
"好用的php验证码类库.zip"就是一个这样的资源,提供了易于使用的PHP验证码实现。 验证码类库通常包括以下几个核心组件: 1. **生成验证码**:这个过程涉及到随机字符串或数字的生成,通常结合特定的字体、颜色和...
在HTML页面中,通常会有一个图像标签 `<img>`,它的 `src` 属性指向PHP验证码生成脚本(如 `code.php`),这样当用户加载页面时,服务器会动态生成一个验证码图片并显示在浏览器上。此外,HTML页面还会包含一个表单...
以下是对这9款PHP验证码的概述和相关知识点的详细解释: 1. **基础验证码** - 这些PHP验证码可能基于简单字符串生成,结合随机颜色和字体,以增加识别难度。 - 常用的PHP函数如`rand()`用于生成随机数字,`...
本篇文章将深入探讨这个"php验证码简单源码"的知识点。 首先,验证码的基本原理是生成一段随机的字符串或数字,然后通过图像或其他形式显示给用户,用户在提交表单时需要输入看到的验证码。这个过程要求验证码在...
漂亮的php验证码,包含支持多字体,字母验证码,数字验证码,经过改进的支持多字体的php验证码,很清爽的感觉,也很大气,适合做商业网站开发插件,同时过滤了几个容易混淆的数字与字母。
总的来说,PHP验证码是网站安全体系中的一个重要环节,通过理解和实践PHP验证码的实现,开发者可以更好地保护自己的应用程序免受自动化攻击。同时,随着技术的进步,验证码的设计和实现也需要不断更新以应对新的挑战...
这里我们将深入探讨“实用的php验证码类库”这一主题,了解其核心功能和实现原理。 首先,验证码类库通常包含以下几个关键组成部分: 1. **随机字符生成**:验证码通常由随机的字母、数字或特殊字符组成。PHP的...
验证码(CAPTCHA)是一种用于...总结来说,创建一个简单而完整的PHP验证码涉及到生成随机字符串、图像处理、会话管理以及验证逻辑等多个方面。通过理解并实践这些步骤,开发者可以为自己的PHP应用添加有效的安全防护。
这个PHP验证码小实例对于初学者来说是个很好的起点,它涵盖了基本的图像处理、随机数生成和会话管理等概念。在实际应用中,你可能还需要考虑以下几点优化: - **安全性**:增加字符串长度,使用更复杂的字符集,...
这个“一个php验证码生成类代码.zip”压缩包中包含了一个PHP验证码生成类,它能够帮助开发者轻松地创建具有背景、干扰元素和随机文本的图像验证码。 验证码类通常包括以下几个核心功能: 1. **生成随机字符串**:...
以下是一个简单的PHP验证码实现示例(validateCode.php): ```php <?php session_start(); $width = 120; $height = 40; $image = imagecreatetruecolor($width, $height); $background_color = ...
在PHP中实现验证码功能,我们可以创建一个自定义的类来处理这一过程,正如“支持中文字母数字和自定义字体的php验证码类”所示。这个类将涵盖创建图片、添加干扰元素以及存储和验证SESSION的主要功能。 1. **GD库**...
总之,通过理解并实现这样一个PHP验证码系统,你不仅能提升网站的安全性,还能深入理解图像处理和随机数据生成在Web开发中的应用。不断学习和改进,你将能够创建出更强大、更适应需求的验证码解决方案。
php 验证码 源码 范例 简单 基础 入门
`lib_verify.php` 文件可能是一个自定义的PHP验证码类,用于生成和验证这些验证码。 验证码类的设计通常包括以下几个关键部分: 1. **生成随机字符串**:验证码的核心是那一串随机字符。在PHP中,可以使用`rand()`...
"php验证码类"指的是用PHP编程语言编写的一个特定的类,这个类通常包含用于生成和验证随机图像验证码的函数。 验证码的主要功能是确保用户是人类,而不是计算机程序。它们通过创建一个难以自动识别的图像,其中包含...
在这个简单的PHP验证码项目中,我们主要涉及到以下几个知识点: 1. **PHP基础**:PHP是一种服务器端的脚本语言,广泛应用于网页开发。它允许开发者在HTML代码中嵌入PHP代码,实现动态网页的功能。这里,PHP初学者...
本篇文章将深入探讨PHP验证码的实现原理、类型以及如何创建美观的验证码。 首先,我们要理解验证码的基本原理。验证码通常包含一串随机生成的字符或数字,通过图像展示出来,用户需要手动输入才能完成验证。这种...
要实现PHP验证码,我们分为以下几个步骤: 1. **生成随机字符串**:首先,我们需要创建一个随机字符串,长度通常在4到6位之间。可以使用`rand()`函数生成随机数字,再结合`chr()`函数将其转换为字符。为了增加复杂...
php验证码生成类