一个漂亮的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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php的正则处理函数总结分析
Jun 20 PHP
php 获取全局变量的代码
Apr 21 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
PHP输出日历表代码实例
Mar 27 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
php操作access数据库的方法详解
Feb 22 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 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下保存远程图片到本地的办法
2010/08/08 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
python函数形参用法实例分析
2015/08/04 Python
详解Django admin高级用法
2019/11/06 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
工程管理造价应届生求职信
2013/11/13 职场文书
白酒市场开发计划书
2014/01/09 职场文书
学生打架检讨书大全
2014/01/23 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
亲属关系公证书
2014/04/08 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
党校学习心得体会范文
2014/09/09 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
护理心得体会范文
2016/01/22 职场文书
vue的项目如何打包上线
2022/04/13 Vue.js
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android