一个好用的PHP验证码类

分享一个好用的 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" οnclick="javascript:this.src='code.php?time='+Math.random();" /> 
posted on 2013-12-27 06:57 snowfly123 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/linuxnotes/p/3493437.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值