一个好用的PHP验证码类
2013-12-27 06:57
561 查看
分享一个好用的php验证码类,包括调用示例。说明:如果不适用指定的字体,那么就用imagestring()函数,如果需要遇到指定的字体,就要用到imagettftext()函数。字体的位置在C盘下Windows/Fonts.
参考了网上的php 生成验证码的方法,以及php 图片验证码和php 中文验证码的生成方法。用到了PHP GD库的相关知识。
1,生成验证码的类 VerificationCode.class.php<?php
class VerificationCode{
private $charset="abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789"; //随机因子
private $code; //验证码
private $codelen=4; //验证码长度
private $width=110; //宽度
private $height=30; //高度
private $img; //图像资源句柄
private $font; //制定字体
private $fontSize=25; //字体大小
private $fontColor; //字体颜色
public function __construct(){
$this->font="CALIBRIZ.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),$i*$x+mt_rand(1,5),$this->height/1.4,$this->fontColor,$this->font,$this->code[$i]); // www.jbxue.com
//imagestring($this->img,5,$i*$x+mt_rand(1,5),5,$this->code[$i],$this->fontColor);
}
}
//生成线条、雪花
private function createDisturb(){
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->width),mt_rand(0,$this->width),mt_rand(0,$this->width),$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 showCode(){
$this->createBg();
$this->createCode();
$this->createDisturb();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode(){
return strtolower($this->code);
}
}
?> code.php<?php
session_start();
require_once 'VerificationCode.class.php';
$code=new VerificationCode();
$_SESSION['code']=$code->getCode();
$code->showCode();
?>
验证码:<input type="text" name="code" /><img src="code.php" onclick="javascript:this.src='code.php?time='+Math.random();" />
参考了网上的php 生成验证码的方法,以及php 图片验证码和php 中文验证码的生成方法。用到了PHP GD库的相关知识。
1,生成验证码的类 VerificationCode.class.php<?php
class VerificationCode{
private $charset="abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789"; //随机因子
private $code; //验证码
private $codelen=4; //验证码长度
private $width=110; //宽度
private $height=30; //高度
private $img; //图像资源句柄
private $font; //制定字体
private $fontSize=25; //字体大小
private $fontColor; //字体颜色
public function __construct(){
$this->font="CALIBRIZ.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),$i*$x+mt_rand(1,5),$this->height/1.4,$this->fontColor,$this->font,$this->code[$i]); // www.jbxue.com
//imagestring($this->img,5,$i*$x+mt_rand(1,5),5,$this->code[$i],$this->fontColor);
}
}
//生成线条、雪花
private function createDisturb(){
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->width),mt_rand(0,$this->width),mt_rand(0,$this->width),$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 showCode(){
$this->createBg();
$this->createCode();
$this->createDisturb();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode(){
return strtolower($this->code);
}
}
?> code.php<?php
session_start();
require_once 'VerificationCode.class.php';
$code=new VerificationCode();
$_SESSION['code']=$code->getCode();
$code->showCode();
?>
验证码:<input type="text" name="code" /><img src="code.php" onclick="javascript:this.src='code.php?time='+Math.random();" />
相关文章推荐
- 入门级的PHP验证码
- paip.广告过滤系统 php 实现
- paip.广告过滤系统 php 实现
- 一个好用的PHP验证码类实例分享
- 浅谈PHP变量作用域以及地址引用问题
- 类似php的js数组的in_array函数自定义方法
- php date
- 使用PHP做网页采集实例过程总结
- mac下php扩展mcrypt无法安装问题
- php 异步执行
- Intellij Idea/Webstorm/Phpstorm
- Discuz! x3.1的插件/utility/convert/index.php代码执行漏洞
- DedeCMS 5.7 config.php 跨站脚本漏洞
- 开始学习PHP之初识数据库连接
- PHP覆盖率
- 整理收藏一份PHP高级工程师的笔试题(附答案)
- php session 和cookie
- PHP dev note
- 转 php 5.3.6中php-fpm 配置
- IIS7 + PHP + FastCGI