一个漂亮的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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
laravel实现上传图片的两种方式小结
Oct 12 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
php png失真的原因及解决办法
Nov 17 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
javascript常见操作汇总
2014/09/03 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
Python引用传值概念与用法实例小结
2017/10/07 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
技术总监岗位职责
2013/12/05 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
工作总结与自我评价
2014/09/18 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
实习指导老师意见
2015/06/04 职场文书
于丹论语心得观后感
2015/06/15 职场文书
初三数学教学反思
2016/02/17 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书