热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php实现随机数字、字母的验证码

php实现随机数字、字母的验证码可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。废话不多说,直接上代码:1、classgd.class.php

 php实现随机数字、字母的验证码

   可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。

  废话不多说,直接上代码:

1、classgd.class.php
php
Class Captcha{
        private $_fontfile='';
        private $_size=36;
        private $_width=200;
        private $_height=100;
        private $_length=4;
        private $_image=null;
        private $_snow=0;
        private $_pixel=0;
        private $_line=0;
    public function __construct($config=array()){
        if(is_array($config)&&count($config)>0){
            if(isset($config['fontfile'])&&is_file($config['fontfile'])&&is_readable($config['fontfile'])){
                $this->_fOntfile=$config['fontfile'];
            }else{
                return false;
            }
            if(isset($config['size'])&&$config['size']>0){
                $this->_size=(int)$config['size'];
            }
            if(isset($config['width'])&&$config['width']>0){
                $this->_width'];
            }
            if(isset($config['height'])&&$config['height']>0){
                $this->_height'];
            }
            if(isset($config['length'])&&$config['length']>0){
                $this->_length=(int)$config['length'];
            }
            if(isset($config['snow'])&&$config['snow']>0){
                $this->_snow=(int)$config['snow'];
            }
            if(isset($config['pixel'])&&$config['pixel']>0){
                $this->_pixel=(int)$config['pixel'];
            }
            if(isset($config['line'])&&$config['line']>0){
                $this->_line=(int)$config['line'];
            }
            $this->_image=imagecreatetruecolor($this->_width,$this->_height);
            return $this->_image;

         }
         else{
            return false;
        }
    }
    public function getCaptcha(){
        $white=imagecolorallocate($this->_image,255,255,255);
        imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white);
        $str=$this->_generateStr($this->_length);
        if(false===$str){
            return false;
        }
        $fontfile=$this->_fontfile;
        for($i=0;$i<$this->_length;$i++){
            $size=$this->_size;
            $angle=mt_rand(-30,30);
            $x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10);
            $y=ceil($this->_height/1.5);
            $color=$this->_getRandColor();
            //针对中文字符截取
            //$text=mb_substr($str,$i,1,'utf-8');
            $text=$str{$i};
            imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text);
        }
        if($this->_snow){
            $this->_getSnow();

        }else{
            if($this->_pixel){
                $this->_getPixel();

            }
            if($this->_line){
                $this->_getLine();
            }
        }
        header('content-type:image/png');
        imagepng($this->_image);
        imagedestroy($this->_image);
        return strtolower($str);
    }
    private function _getSnow(){
        for($i=1;$i<=$this->_snow;$i++){
            imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),'*',$this->_getRandColor());
        }
    }
    private function _getPixel(){
        for($i=1;$i<=$this->_pixel;$i++){
            imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());
        }
    }
    private function _getLine(){
        for($i=1;$i<=$this->_line;$i++){
            imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());

        }
    }
    private function _generateStr($length=4){
        if($length<1 || $length>30){
            return false;
        }
        $chars=array(
            'a','b','c','d','e','f','g','h','k','m','n','p','x','y','z',
            'A','B','C','D','E','F','G','H','K','M','N','P','X','Y','Z',
            1,2,3,4,5,6,7,8,9
            );
        $str=join('',array_rand(array_flip($chars),$length));
        return $str;
    }
    private function _getRandColor(){
        return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
    }
}
?>

 

 

 2、testCaptcha.php

php
require_once 'classgd.class.php';
$config=array(
'fontfile'=>'fonts/simfang.ttf',   //引入字体文件
//'snow'=>50,
'pixel'=>100,
'line'=>10
    );
$captcha=new Captcha($config);
$captcha->getCaptcha();
?>

 


推荐阅读
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
author-avatar
超级神棍小虾米
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有