一个漂亮的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 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
php中strtotime函数性能分析
Nov 20 PHP
php实现文件管理与基础功能操作
Mar 21 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 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 如何向 MySQL 发送数据
2006/10/09 PHP
php str_pad 函数使用详解
2009/01/13 PHP
解析isset与is_null的区别
2013/08/09 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
人机交互程序 python实现人机对话
2017/11/14 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
五型班组建设方案
2014/02/10 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
2016年国培研修日志
2015/11/13 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android