`
alfred_long
  • 浏览: 566774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP验证码

 
阅读更多

这是个验证码类,我现在设置的大小是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验证码类库.zip"就是一个这样的资源,提供了易于使用的PHP验证码实现。 验证码类库通常包括以下几个核心组件: 1. **生成验证码**:这个过程涉及到随机字符串或数字的生成,通常结合特定的字体、颜色和...

    漂亮的php 验证码

    在HTML页面中,通常会有一个图像标签 `&lt;img&gt;`,它的 `src` 属性指向PHP验证码生成脚本(如 `code.php`),这样当用户加载页面时,服务器会动态生成一个验证码图片并显示在浏览器上。此外,HTML页面还会包含一个表单...

    php验证码 9款好看的验证码

    以下是对这9款PHP验证码的概述和相关知识点的详细解释: 1. **基础验证码** - 这些PHP验证码可能基于简单字符串生成,结合随机颜色和字体,以增加识别难度。 - 常用的PHP函数如`rand()`用于生成随机数字,`...

    php验证码简单源码

    本篇文章将深入探讨这个"php验证码简单源码"的知识点。 首先,验证码的基本原理是生成一段随机的字符串或数字,然后通过图像或其他形式显示给用户,用户在提交表单时需要输入看到的验证码。这个过程要求验证码在...

    漂亮的php验证码,包含支持多字体,字母验证码,数字验证码

    漂亮的php验证码,包含支持多字体,字母验证码,数字验证码,经过改进的支持多字体的php验证码,很清爽的感觉,也很大气,适合做商业网站开发插件,同时过滤了几个容易混淆的数字与字母。

    PHP验证码的应用示例

    总的来说,PHP验证码是网站安全体系中的一个重要环节,通过理解和实践PHP验证码的实现,开发者可以更好地保护自己的应用程序免受自动化攻击。同时,随着技术的进步,验证码的设计和实现也需要不断更新以应对新的挑战...

    实用的php验证码类库

    这里我们将深入探讨“实用的php验证码类库”这一主题,了解其核心功能和实现原理。 首先,验证码类库通常包含以下几个关键组成部分: 1. **随机字符生成**:验证码通常由随机的字母、数字或特殊字符组成。PHP的...

    简单完整的PHP验证码

    验证码(CAPTCHA)是一种用于...总结来说,创建一个简单而完整的PHP验证码涉及到生成随机字符串、图像处理、会话管理以及验证逻辑等多个方面。通过理解并实践这些步骤,开发者可以为自己的PHP应用添加有效的安全防护。

    PHP验证码小实例

    这个PHP验证码小实例对于初学者来说是个很好的起点,它涵盖了基本的图像处理、随机数生成和会话管理等概念。在实际应用中,你可能还需要考虑以下几点优化: - **安全性**:增加字符串长度,使用更复杂的字符集,...

    一个php验证码生成类代码.zip

    这个“一个php验证码生成类代码.zip”压缩包中包含了一个PHP验证码生成类,它能够帮助开发者轻松地创建具有背景、干扰元素和随机文本的图像验证码。 验证码类通常包括以下几个核心功能: 1. **生成随机字符串**:...

    php 验证码

    以下是一个简单的PHP验证码实现示例(validateCode.php): ```php &lt;?php session_start(); $width = 120; $height = 40; $image = imagecreatetruecolor($width, $height); $background_color = ...

    支持中文字母数字和自定义字体的php验证码类

    在PHP中实现验证码功能,我们可以创建一个自定义的类来处理这一过程,正如“支持中文字母数字和自定义字体的php验证码类”所示。这个类将涵盖创建图片、添加干扰元素以及存储和验证SESSION的主要功能。 1. **GD库**...

    自制php验证码(兼容中文,支持纯色杂色,杂点线条)

    总之,通过理解并实现这样一个PHP验证码系统,你不仅能提升网站的安全性,还能深入理解图像处理和随机数据生成在Web开发中的应用。不断学习和改进,你将能够创建出更强大、更适应需求的验证码解决方案。

    php 验证码源码范例

    php 验证码 源码 范例 简单 基础 入门

    php验证码,php验证码类

    `lib_verify.php` 文件可能是一个自定义的PHP验证码类,用于生成和验证这些验证码。 验证码类的设计通常包括以下几个关键部分: 1. **生成随机字符串**:验证码的核心是那一串随机字符。在PHP中,可以使用`rand()`...

    php验证码类

    "php验证码类"指的是用PHP编程语言编写的一个特定的类,这个类通常包含用于生成和验证随机图像验证码的函数。 验证码的主要功能是确保用户是人类,而不是计算机程序。它们通过创建一个难以自动识别的图像,其中包含...

    PHP验证码制作

    在这个简单的PHP验证码项目中,我们主要涉及到以下几个知识点: 1. **PHP基础**:PHP是一种服务器端的脚本语言,广泛应用于网页开发。它允许开发者在HTML代码中嵌入PHP代码,实现动态网页的功能。这里,PHP初学者...

    php验证码源码

    本篇文章将深入探讨PHP验证码的实现原理、类型以及如何创建美观的验证码。 首先,我们要理解验证码的基本原理。验证码通常包含一串随机生成的字符或数字,通过图像展示出来,用户需要手动输入才能完成验证。这种...

    php 验证码实现

    要实现PHP验证码,我们分为以下几个步骤: 1. **生成随机字符串**:首先,我们需要创建一个随机字符串,长度通常在4到6位之间。可以使用`rand()`函数生成随机数字,再结合`chr()`函数将其转换为字符。为了增加复杂...

    php验证码生成类.zip

    php验证码生成类

Global site tag (gtag.js) - Google Analytics