PHP生成验证码

原网页 http://www.web-jia.com/view.php?a=3

生成验证码的类
//验证码类
class ValidateCode {
//private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $charset = 'ABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $code;//验证码
private $codelen = 6;//验证码长度
private $width = 150;//宽度
private $height = 44;//高度
private $img;//图形资源句柄
private $font;//指定的字体
private $fontsize = 32;//指定字体大小
private $fontcolor;//指定字体颜色
//构造方法初始化
public function __construct() {
$this->font = dirname(__FILE__).'/font/Nexabold.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]);
//imagettftext函数说明
//$this->img 这个是画布资源
//$this->fontsize 官方文档的解释是,字体大小,其长度单位依赖于GD库的版本,对于GD1来说是像素,对于GD2来说是磅(point)。
//mt_rand(-30,30) 是旋转角度。
//$_x*$i+mt_rand(1,5) 和 $this->height / 1.4 被绘制字符串的第一个字符的基线点。单位是像素。这里涉及到字体设计的基本知识--基线。这个点绝对不是左上角,而具体是什么取决于所使用的字体是如何设计的。对于宋体、楷体、黑体等常见的字体中的汉字,这个点大概位于字体的左下部分;而对于英文字母和标点符号,则各不相同。
//$this->fontcolor 字体的颜色
//$this->font 字体文件
//$this->code[$i] 要渲染的字符串。需要注意必须是UTF-8编码的字符串。
}
}
//生成线条、雪花
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);
}
}

//使用验证码代码(这是个简单的输出图片)
session_start();
require './ValidateCode.class.php'; //先把类包含进来,实际路径根据实际情况进行修改。
$_vc = new ValidateCode(); //实例化一个对象
$_vc->doimg();
$_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中

在登陆页面上只要用图片包含这页面就可以了

注意是的php要打开gd2扩展
这边放着个简单的字体文件可以下载直接使用Nexabold.ttf

 

HTML 5实现手机摇一摇的功能
JavaScript入门之对象与JSON(1)
整合Apache中JSP和PHP
PHP 5.3中的命名空间使用方法浅述
HTML5 未来不可阻挡的力量
Node.js初体验(1)
5.4.1 转向JavaScript(3)
2.4 DOCTYPE
走近Node.js的异步代码设计(1)

posted on 2017-03-17 21:56  hongyi1159  阅读(267)  评论(0编辑  收藏  举报