足球游戏_中国足彩网¥体育资讯$

PHP验证码类实现验证码功能
来源:易贤网 阅读:717 次 日期:2015-04-15 14:42:38
温馨提示:易贤网小编为您整理了“PHP验证码类实现验证码功能”,方便广大网友查阅!

PHP验证码类实现验证码功能,有两个方法,分别是用内置字体和自定义字体生成验证码。具体代码如下:

<?php

/**

* 验证码生成类

* @example

* $pic = new uImage();

* $code = $pic->getVerifyCode();

* header("Content-type:image/png");

* $pic->captchaFromFont($font='RAVIE.TTF'); or $pic->captcha();

*/

class uImage {

/**

* 验证码字符

* @access protected

*/

protected $code;

/**

* 生成图片验证码,直接输出的是图片,字体大小是内置字体,最大是5

* @access public

* @param int $width 验证码图片宽度

* @param int $height 验证码图片的高度

* @param int $snow 背景雪花的数量

* @param int $line 干扰线的条数

*/

public function captcha($width=100, $height=30, $snow=80, $line=3) {

$pic = imagecreatetruecolor($width, $height);

$backageColor = imagecolorallocate($pic, 0xFF, 0xFF, 0xFF);

imagefill($pic, 0, 0, $backageColor);

//打雪花

for($i=0; $i<=$snow;$i++) {

$color = imagecolorallocate($pic, mt_rand(150, 230), mt_rand(150, 230), mt_rand(150, 230));

imagechar($pic, 1, mt_rand(0, $width), mt_rand(0, $height), "*", $color);

imagecolordeallocate ($pic, $color);

}

//画干扰线

for($i=0; $i<=$line; $i++) {

$x1 = mt_rand(2, $width * 0.2);

$x2 = mt_rand($width * 0.8, $width - 2);

$y1 = mt_rand(2, $height - 2);

$y2 = mt_rand(2, $height - 2);

$color = imagecolorallocate($pic, mt_rand(130, 250), mt_rand(130, 250), mt_rand(130, 250));

imageline($pic, $x1, $y1, $x2, $y2, $color);

imagecolordeallocate ($pic, $color);

}

//画字符

$code = $this->code;

$eachW = $width / strlen($code); //图片依据字符个数分配等份数

$fontWidth = imagefontwidth(5); //取得字体宽度

$fontHeight = imagefontheight(5); //取得字体高度

for($i=0; $i<strlen($code);$i++) {

$color = imagecolorallocate($pic, mt_rand(30, 155), mt_rand(30, 155), mt_rand(30, 150));

$x = mt_rand($eachW * $i, $eachW * ($i+1)-$fontWidth);

$y = mt_rand(3, $height-$fontHeight);

imagechar($pic, 5, $x, $y, $code{$i}, $color); //水平画字符

imagecolordeallocate ($pic, $color);

}

//输出

ob_start();

ob_clean();

imagepng($pic);

imagedestroy($pic);

}

/**

* 根据自定义字体生成验证码

* @access public

* @param string $font 字符文件, TrueType 字体文件,.ttf字体

* @param int $fontWeight 字符大小

* @param int $width 图片宽

* @param int $height 图片高

* @param int $snow 背景雪花个数

* @param int $line 干扰线条数

* @param int $padding 图片内边距

*/

public function captchaFromFont($font, $fontWeight=16, $width=100, $height=30, $snow=80, $line=3, $padding=3){

if(!isset($font)){

return false;

}

$pic = imagecreatetruecolor($width, $height);

$backageColor = imagecolorallocate($pic, 0xFF, 0xFF, 0xFF);

imagefill($pic, 0, 0, $backageColor);

imagecolordeallocate ($pic, $backageColor);

//打雪花

for($i=0; $i<=$snow;$i++) {

$color = imagecolorallocate($pic, mt_rand(150, 230), mt_rand(150, 230), mt_rand(150, 230));

imagechar($pic, 1, mt_rand(0, $width), mt_rand(0, $height), "*", $color);

imagecolordeallocate ($pic, $color);

}

//画干扰线

for($i=0; $i<=$line; $i++) {

$x1 = mt_rand(2, $width * 0.2);

$x2 = mt_rand($width * 0.8, $width - 2);

$y1 = mt_rand(2, $height - 2);

$y2 = mt_rand(2, $height - 2);

$color = imagecolorallocate($pic, mt_rand(130, 250), mt_rand(130, 250), mt_rand(130, 250));

imageline($pic, $x1, $y1, $x2, $y2, $color);

imagecolordeallocate ($pic, $color);

}

//画字符

$code = $this->code;

$eachW = $width / strlen($code); //图片依据字符个数分配等份数

$codeArray = str_split($code);

for($i=0; $i<count($codeArray); $i++){

//取得字符宽高

$fontbox = imagettfbbox($fontWeight, 0, $font, $codeArray[$i]);

$fontWidth = $fontbox[2] - $fontbox[0];

$fontHeight = $fontbox[1] - $fontbox[7];

$color = imagecolorallocate($pic, mt_rand(30, 155), mt_rand(30, 155), mt_rand(30, 150)); //字符颜色

$angle = mt_rand(-20, 20); //字符角度

if($i==0){

$start = $eachW * $i+$padding;

$end = $eachW * ($i+1)-$fontWidth;

}

elseif($i == count($codeArray)){

$start = $eachW * $i;

$end = $eachW * ($i+1)-$fontWidth-$padding;

}

else{

$start = $eachW * $i;

$end = $eachW * ($i+1)-$fontWidth-$padding;

}

$x = $start < $end ? mt_rand($start, $end) : $start;

$y = ($fontHeight+$padding) > $height ? $padding : mt_rand($fontHeight+$padding, $height-$padding);

imagettftext($pic, $fontWeight, $angle, $x, $y, $color, $font, $codeArray[$i]); //用 TrueType 字体向图像写入文本

imagecolordeallocate ($pic, $color);

}

//输出

ob_start();

ob_clean();

imagepng($pic);

imagedestroy($pic);

}

/**

* 获取验证码

* @access public

* @param int $len 验证码字符的长度

* @return strint 生成的验证码字符

*/

public function getVerifyCode($len=4){

if(!isset($this->code)){

$this->code = $this->getCode($len);

}

return $this->code;

}

/**

* 生成验证码

* @access protected

* @param int $len 验证码字符的长度

* @return strint 生成的验证码字符

*/

protected function getCode($len) {

$str = "23456789abcdefghijklmnqrstuvwxyz";

$code = "";

for($i=0; $i<$len; $i++) {

$code .= $str{mt_rand(0, strlen($str)-1)};

}

$this->code = $code;

return $code;

}

}

中国足彩网信息请查看IT技术专栏

中国足彩网信息请查看CMS教程
易贤网手机网站地址:PHP验证码类实现验证码功能
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标