非常实用的php验证码类
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-05 10:49:45 浏览: 评论:0
这篇文章主要为大家分享了非常实用的php验证码类,感兴趣的小伙伴们可以参考一下,本文实例为大家分享了php验证码类,供大家参考,具体内容如下:
- <?php
- /**
- *
- * @author Administrator
- *
- */
- class ValidateCode{
- private $width;
- private $height;
- private $codeNum;
- private $img_resouce;
- private $disturbColorNum;
- private $checkCode;
- function __construct($width=80,$height=20,$codeNum=4) {
- $this->width=$width;
- $this->height=$height;
- $this->codeNum=$codeNum;
- $this->checkCode=$this->CreateCheckCode();
- $number=floor($width*$height/25);
- if ($number>240-$codeNum) {
- $this->disturbColorNum=240-$codeNum;
- }else{
- $this->disturbColorNum=$number;
- }
- }
- public function showImage($fontpath='') {
- //创建图像背景
- $this->Img_resouce();
- //var_dump($img_resouce);
- //设置干扰元素
- $this->setDistructcolor();
- //向图像中随机画出文本
- $this->outputtext($fontpath);
- //输出图像
- $this->outputimage();
- }
- /**
- *
- *获取随机创建的验证码
- */
- public function getCheckCode(){
- }
- private function Img_resouce(){
- //创建一个真彩图像
- $this->img_resouce=imagecreatetruecolor($this->width,$this->height);
- //随机设置图像背景
- $backcolor=imagecolorallocate($this->img_resouce,rand(225,255),rand(225,255),rand(225,255));
- //填充颜色
- imagefill($this->img_resouce, 0, 0, $backcolor);
- //设置边框背景
- $border=imagecolorallocate($this->img_resouce, 0,0,0);
- //画一个矩形
- imagerectangle($this->img_resouce,0,0,$this->width-1,$this->height-1,$border);
- }
- private function setDistructcolor(){
- //绘画干扰点
- for ($i = 0; $i <$this->disturbColorNum; $i++) {
- imagesetpixel($this->img_resouce, rand(1, $this->width-2), rand(1, $this->height-2), rand(0,255));
- }
- //绘画干扰线
- for ($j = 0; $j <3; $j++) {
- $linecolor=imagecolorallocate($this->img_resouce,rand(0,255),rand(0,255),rand(0,255));
- imagearc($this->img_resouce, rand(0,$this->width), rand(0,$this->height),
- rand(10, 225), rand(20, 150),
- 55, 44, $linecolor);
- }
- }
- private function CreateCheckCode(){
- $code='23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ';
- $string='';
- for ($i = 0; $i < $this->codeNum; $i++) {
- $char=$code{rand(0, strlen($code)-1)};
- $string.=$char;
- }
- return $string;
- }
- private function outputtext($fontpath=''){
- for ($i = 0; $i < $this->codeNum; $i++) {
- $fontcolor=imagecolorallocate($this->img_resouce, rand(0,128), rand(0, 128), rand(0, 128));
- if ($fontpath=='') {
- $fontsize=rand(3, 5);
- $x=floor($this->width/$this->codeNum)*$i+3;
- $y=rand(0, $this->height-20);
- imagechar($this->img_resouce, $fontsize, $x, $y, $this->checkCode{$i}, $fontcolor);
- }else{
- $fontsize=rand(12, 16);
- $x=floor(($this->width-8)/$this->codeNum)*$i+8;
- $y=rand($fontsize, $this->height-15);
- imagettftext($this->img_resouce,$fontsize,rand(-45,45),$x,$y,$fontcolor,fontpath,$this->checkCode{$i});
- }
- }
- }
- private function outputimage() {
- if (imagetypes() & IMG_GIF) {
- header("Content-type: image/gif");
- imagegif($this->img_resouce);
- }else if(imagetypes() & IMG_JPEG) {
- header("Content-type: image/jpeg");
- imagejpeg($this->img_resouce);
- }else if(imagetypes() & IMG_PNG) {
- header("Content-type: image/png");
- imagepng($this->img_resouce);
- }else {
- echo "PHP不支持的类型";
- }
- }
- private function __destruct(){
- imagedestroy($this->img_resouce);
- }
- }
- ?>
以上就是本文的全部内容,希望对大家的学习有所帮助。
Tags: php验证码类
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)