zoukankan      html  css  js  c++  java
  • 一个好用的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" onclick="javascript:this.src='code.php?time='+Math.random();" /> 
  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/linuxnotes/p/3493437.html
Copyright © 2011-2022 走看看