PHP制作验证码

PHP制作验证码详细教程

效果:

myvcode.class.php:封装创建验证码的类

   1: <?php
   2: /*
   3: * file:myvcode.class.php
   4: * 验证码类,类名Vcode
   5: */
   6: class Vcode
   7: {
   8:     private $width;              /*验证码宽度*/
   9:     private $height;             /*验证码高度*/
  10:     private $codeNum;            /*验证码字符个数*/
  11:     private $checkCode;            /*验证码字符*/
  12:     private $image;                /*验证码资源*/
  13:     private $pixNum;            /*绘制干扰点的个数*/
  14:     private $lineNum;            /*绘制干扰线的条数*/
  15:
  16:     /*
  17:     *构造方法实例化验证码对象,并初始化数据
  18:     *@param int $width         设置默认宽度
  19:     *@param int $height     设置默认高度
  20:     *@param int $codeNum    设置验证码中的字符个数
  21:     *@param int $pixNum        设置干扰点的个数
  22:     *@param int $lineNum    设置干扰线的数量
  23:     */
  24:     function __construct($width=80,$height=40,$codeNum=4,$pixNum=40,$lineNum=5)
  25:     {
  26:         $this->width = $width;
  27:         $this->height = $height;
  28:         $this->codeNum = $codeNum;
  29:         $this->pixNum = $pixNum;
  30:         $this->lineNum = $lineNum;
  31:     }
  32:     /*内部私有方法,创建图像资源*/
  33:     private function getCreateImage()
  34:     {
  35:         $this->image = imagecreatetruecolor($this->width, $this->height);
  36:         $white = imagecolorallocate($this->image,0xff,0xff,0xff);
  37:         imagefill($this->image, 0, 0, $white);
  38:         $black = imagecolorallocate($this->image,0,0,0);
  39:         imagerectangle($this->image, 0, 0, $this->width-1, $this->height-1, $black);
  40:     }
  41:     /*内部私有方法,绘制字符,去掉o0Llz和012*/
  42:     private function createCheckCode()
  43:     {
  44:         $code = ‘3456789abcdefghijkmnpqrstuvwxyABCDEFGHIJKMNPQRSTUVWXY‘;
  45:         $this->checkCode = "";
  46:         for($i=0; $i<$this->codeNum;$i++)
  47:         {
  48:             $char = $code{rand(0,strlen($code) - 1)};
  49:             $this->checkCode .= $char;
  50:             $fontColor = imagecolorallocate($this->image, rand(0,128), rand(0,128),rand(0,128));
  51:             $fontSize = rand(3,5);
  52:             $x = rand(0,$this->width-imagefontwidth($fontSize));
  53:             $y = rand(0,$this->height-imagefontheight($fontSize));
  54:             imagechar($this->image, $fontSize, $x, $y, $char, $fontColor);
  55:         }
  56:     }
  57:     /*内部私有方法设置干扰元素*/
  58:     private function setDisturbColor()
  59:     {
  60:         /*绘制干扰点*/
  61:         for($i=0; $i<$this->pixNum; $i++)
  62:         {
  63:             $color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));
  64:             imagesetpixel($this->image, rand(1,$this->width-2), rand(1,$this->height-2), $color);
  65:         }
  66:         /*绘制干扰线*/
  67:         for($i=0; $i<$this->lineNum; $i++)
  68:         {
  69:             $color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));

70: imageline($this->image, rand(1,$this->width / 2), rand(1,$this->height / 2),

rand($this->width / 2,$this->width – 2), rand($this->height / 2,$this->height – 2), $color);

  71:         }
  72:     }
  73:     /*开启session保存 利用echo 输出图像*/
  74:     function __toString()
  75:     {
  76:         $_SESSION[‘code‘] = strtoupper($this->checkCode);
  77:         $this->getCreateImage();
  78:         $this->createCheckCode();
  79:         $this->setDisturbColor();
  80:         $this->outputImg();
  81:     }
  82:     /*内部私有方法输出图像*/
  83:     private function outputImg()
  84:     {
  85:         header("content-type:image/png");
  86:         imagepng($this->image);
  87:     }
  88:     /*析构方法,释放对象*/
  89:     function __destruct()
  90:     {
  91:         imagedestroy($this->image);
  92:     }
  93: }
  94: ?>

imgcode.php输出图像

   1: <?php
   2: session_start();
   3: require_once(‘myvcode.class.php‘);
   4: echo new Vcode();
   5: ?>

test.html:同过img标签引用

   1: <img src="imgcode.php">

可以加一个a标签,用js实现换一张效果:

/*局部刷新换验证码*/
function changeCode()
{
	var imgcode = document.getElementById(‘code‘);
	var change = document.getElementById(‘change‘);
	change.onclick = function()
	{
		/*必须加后面的参数才能刷新*/
		imgcode.src=‘code.php?tm‘+Math.random();
	}
}

code和change分别是img和a的id

时间: 2024-11-05 22:05:55

PHP制作验证码的相关文章

学习MVC之制作验证码

制作验证码的方法在@洞庭夕照 看到的,原文链接:http://www.cnblogs.com/mzwhj/archive/2012/10/22/2720089.html 现自己利用该方法制作一个简单的验证码,运行程序效果如下: 现正式开始: 1.新建项目:VerificationCodeTest 2.选择模板:基本 3.添加图片: 放置位置: 4.重点来了,新建文件夹Image,再新建一个类Text.cs using System; using System.Collections.Generi

Jsp制作验证码

验证码 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能.这个问题可以由计算

制作验证码时 图片无法刷新

1在网页上制作上图中的验证码时,点击图片不能刷新依旧是原图,找了好久终于发现是js语句中的错误,如下: 如果不加后面的new Date().getTime(),每次请求/AuthCode/getAuthCode都是一样的所以图片不会变化,加上之后每次请求会变化,就会重新加载图片了1 function reload(){                    document.getElementById("bt").src="/AuthCode/getAuthCode?&qu

简单制作验证码和绘制图片

今天仍然是完善一般处理程序小项目,但是昨天小小的项目已经终结,今天只是完善一下新的样式罢啦,嘿嘿,我们通常在网上浏览图片时间都会看到图片上面呈现有水印字体的样式,其实这些图片都是通过一些简单的小技术来修饰的:另外我们现在在网上随处可见注册页面,当我们想在一个网站上面注册新的用户时间,需要注册完信息以后填写随机生成的验证码,或者我们想要登录一个网站时间也需要验证码的填写,由此可见,验证码也是我们程序员需要必备的小技术哦,下面就来总结一下这两项小功能的实现. 一.图片上的水印字体 我们可以看到第一张

PHP_制作验证码

PHP制作一个验证码,主要使用数组相关函数 1 <?php 2 header("content-type:text/html;charset=UTF-8"); 3 //建立3个范围数组 4 $shuzi = range(0,9); 5 $zimuda = range('A','Z'); 6 $zimuxiao = range('a','z '); 7 8 //将这3个数组合并成新数组 9 $arr=array_merge($shuzi,$zimuxiao,$zimuda); 10

java制作验证码

建立一个web工程 编写servlet,生成图像 package com.imooc; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.http.HttpServlet

jcaptcha sample 制作验证码

Skip to end of metadata Created by marc antoine garrigue, last modified by Jeremy Waters on Feb 23, 2012 Go to start of metadata Description This integration module provides the shortest way to integrate JCaptcha to your web application. This module

PHP用GD库绘制图片,制作验证码浏览器不能输出

1,代码如下: <?php function fillRandomString(){ //生成验证码 $char = array_merge(range(0, 9),range("a", "z"),range("A", "Z")); //讲字符串$char打乱 $luan = str_shuffle(implode("", $char)); //从字符串中随机取四位 return  substr($l

使用Java制作验证码

验证码介绍 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能.这个问题可以由