一个漂亮的php验证码类(分享)


Posted in PHP onAugust 06, 2013

直接上代码:

//验证码类
class ValidateCode {
 private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
 private $code;//验证码
 private $codelen = 4;//验证码长度
 private $width = 130;//宽度
 private $height = 50;//高度
 private $img;//图形资源句柄
 private $font;//指定的字体
 private $fontsize = 20;//指定字体大小
 private $fontcolor;//指定字体颜色
 //构造方法初始化
 public function __construct() {
  $this->font = dirname(__FILE__).'/font/elephant.ttf';//注意字体路径要写对,否则显示不了图片
 }
 //生成随机码
 private function createCode() {
  $_len = strlen($this->charset)-1;
  for ($i=0;$i<$this->codelen;$i++) {
   $this->code .= $this->charset[mt_rand(0,$_len)];
  }
 }
 //生成背景
 private function createBg() {
  $this->img = imagecreatetruecolor($this->width, $this->height);
  $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
  imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
 }
 //生成文字
 private function createFont() {
  $_x = $this->width / $this->codelen;
  for ($i=0;$i<$this->codelen;$i++) {
   $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
   imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
  }
 }
 //生成线条、雪花
 private function createLine() {
  //线条
  for ($i=0;$i<6;$i++) {
   $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
   imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
  }
  //雪花
  for ($i=0;$i<100;$i++) {
   $color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
  }
 }
 //输出
 private function outPut() {
  header('Content-type:image/png');
  imagepng($this->img);
  imagedestroy($this->img);
 }
 //对外生成
 public function doimg() {
  $this->createBg();
  $this->createCode();
  $this->createLine();
  $this->createFont();
  $this->outPut();
 }
 //获取验证码
 public function getCode() {
  return strtolower($this->code);
 }
}

输出实例:一个漂亮的php验证码类(分享)

使用方法:
1、先把验证码类保存为一个名为 ValidateCode.class.php 的文件;
2、新建一个名为 captcha.php 的文件进行调用该类;
captcha.php

session_start();
require './ValidateCode.class.php';  //先把类包含进来,实际路径根据实际情况进行修改。
$_vc = new ValidateCode();  //实例化一个对象
$_vc->doimg();  
$_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中

3、引用到页面中,代码如下:
<img  title="点击刷新" src="./captcha.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>

4、一个完整的验证页面,代码如下:
<?php
session_start();
//在页首先要开启session,
//error_reporting(2047);
session_destroy();
//将session去掉,以每次都能取新的session值;
//用seesion 效果不错,也很方便
?>
<html>
<head>
<title>session 图片验证实例</title>
<style type="text/css">
#login p{
margin-top: 15px;
line-height: 20px;
font-size: 14px;
font-weight: bold;
}
#login img{
cursor:pointer;
}
form{
margin-left:20px;
}
</style>
</head> 
<body> 
<form id="login" action="" method="post">
<p>此例为session验证实例</p>
<p>
<span>验证码:</span>
<input type="text" name="validate" value="" size=10> 
<img  title="点击刷新" src="./captcha.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>
</p>
<p>
<input type="submit">
</p>
</form>
<?php
//打印上一个session;
//echo "上一个session:<b>".$_SESSION["authnum_session"]."</b><br>";
$validate="";
if(isset($_POST["validate"])){
$validate=$_POST["validate"];
echo "您刚才输入的是:".$_POST["validate"]."<br>状态:";
if($validate!=$_SESSION["authnum_session"]){
//判断session值与用户输入的验证码是否一致;
echo "<font color=red>输入有误</font>"; 
}else{
echo "<font color=green>通过验证</font>"; 
}
} 
?>

完整demo下载:demo
PHP 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
使用无限生命期Session的方法
Oct 09 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
如何在PHP中读写文件
Sep 07 PHP
如何在php中正确的使用json
Aug 06 #PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 #PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 #PHP
解析php中如何调用用户自定义函数
Aug 06 #PHP
使用php实现截取指定长度
Aug 06 #PHP
php 如何获取数组第一个值
Aug 06 #PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 #PHP
You might like
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
PHP学习记录之数组函数
2018/06/01 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
详解Python中break语句的用法
2015/05/14 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
爱之链教学反思
2014/04/30 职场文书
保密工作目标责任书
2014/07/28 职场文书
争做文明公民倡议书
2014/08/29 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
电频谱管理的原则是什么
2022/02/18 无线电