CI框架里用的验证码
浏览:4852次 出处信息
自带那个不太喜欢,于是另外折腾了个
使用方法如下
字体文件在此
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class vcode extends CI_Model {
// private $charset = "abcdefghizklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; //随机因子
private $charset = "1234567890"; //随机因子
private $code; //验证码文字
private $codelen = 4; //验证码显示几个文字
private $width = 75; //验证码宽度
private $height = 25; //验证码高度
private $img; //验证码资源句柄
private $font; //指定的字体
private $fontsize = 16; //指定的字体大小
private $fontcolor; //字体颜色 随机
//构造类 编写字体
public function __construct() {
parent::__construct();
$this->font = APPPATH . 'font/LiberationSans-Bold.ttf';
}
//创建4个随机码
private function createCode() {
$_leng = strlen($this->charset) - 1;
for ($i = 0; $i < $this->codelen; $i++) {
$this->code.=$this->charset[mt_rand(0, $_leng)];
}
return $this->code;
}
//创建背景
private function createBg() {
//创建画布 给一个资源jubing
$this->img = imagecreatetruecolor($this->width, $this->height);
//背景颜色
$color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 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++) {
//文字颜色
$color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
//资源句柄 字体大小 倾斜度 字体长度 字体高度 字体颜色 字体 具体文本
imagettftext($this->img, $this->fontsize, mt_rand(-18, 18), $_x * $i + mt_rand(1, 5), $this->height/1.2, $color, $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 < 45; $i++) {
// $color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
// imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '.', $color);
// }
}
//输出背景
private function outPut() {
//生成标头
header("Expires: -1");
header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
header("Pragma: no-cache");
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
public function create_vcode() {
$this->load->model('vcode');
echo $this->vcode->doimg();
$cookie = array(
'name' => 'vcode',
'value' => $this->common->authCode($this->vcode->getCode(), 'ENCODE', _KEY),
'expire' => '1800',
);
$this->input->set_cookie($cookie);
die;
}
字体文件在此
建议继续学习:
- 验证码的几个常见漏洞 (阅读:3329)
- pytesser:图片验证码识别 (阅读:3129)
- 一个Captcha的思路 (阅读:2278)
- 实现动态验证码的思路 (阅读:2100)
- 验证码的使用场景小议 (阅读:1938)
- 浅谈Web安全验证码 (阅读:1675)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:UTF-8编码内简繁互转的PHP实现
文章信息
- 作者:废墟 <a@anerg.cn> 来源: 废墟
- 标签: 验证码
- 发布时间:2011-09-19 23:42:00
近3天十大热文
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则