当前位置:  开发笔记 > 编程语言 > 正文

还算功能比较全的PHP验证码类

看到PHP100视频34讲写的php验证码类,支持自定义图片大小、字符个数、字符类型、字符大小、图片类型、汉字验证码、干扰线等,注释详细字体文件是微软雅黑,和验证码文件同目录,文件名msyh.ttf,可以从C:\window...">

 

看到PHP100视频34讲写的php验证码类,支持自定义图片大小、字符个数、字符类型、字符大小、图片类型、汉字验证码、干扰线等,注释详细

字体文件是微软雅黑,和验证码文件同目录,文件名msyh.ttf,可以从C:\windows\fonts目录找到,复制到同目录即可

/**

 * @version        Id:  imgcode.php 2012-11-30   k

 * @package        imgcode.php

 * @Purview           default

 * @link           http://www.3oom.com

 */

    $img = new img_code();

    $img->show();

 

class img_code{

    private $img_type = 'png';//输出图片类型 png,gif,jpg

    private $line      = TRUE;//是否增加干扰线

    private $text      = '2';//验证码类型:0数字,1字母,2汉字

    private $text_size= 20;//字体大小

    private $length      = 4;//字符串长度

    private $width      = 120;//图片宽度,像素

    private $height      = 40;//图片高度,像素

    private $font_file= 'msyh.ttf';//字体文件

    public  $img      = '';

   

    /*

    * 创建图片

    */

    private function img_create(){

        $this->img = imagecreate($this->width, $this->height);

        imagecolorallocate($this->img, 255,255,255);

 

    }

    /*

    * 显示图片

    */

    public function show(){

       

        @session_start();

        $this->img_create();

        if($this->line){

        $this->img_line();

        }

        $this->img_text();

        $this->img_header();

       

        imagedestroy($im);

        exit();

    }

 

    /*

    * 生成字符串

    */

    private function img_text(){

        $rand_string = '';

        $im = &$this->img;

        $fontColor[]  = imagecolorallocate($im, 0x15, 0x15, 0x15);

        $fontColor[]  = imagecolorallocate($im, 0x95, 0x1e, 0x04);

        $fontColor[]  = imagecolorallocate($im, 0x93, 0x14, 0xa9);

        $fontColor[]  = imagecolorallocate($im, 0x12, 0x81, 0x0a);

        $fontColor[]  = imagecolorallocate($im, 0x06, 0x3a, 0xd5);

        if($this->text<2){

            //数字,字母

            for($i=0;$i<$this->length;$i++){

                if($this->text){

                    $c=chr(mt_rand(65,90));

                }else{

                    $c=chr(mt_rand(48,57));

                }

                if( $c==&#39;I&#39; ) $c = &#39;K&#39;;

                if( $c==&#39;O&#39; ) $c = &#39;E&#39;;

                $rand_string[]=$c;

            }   

      

       

        }else{

            //汉字,此处可以引入汉字文件

           $arr=array(&#39;大&#39;,&#39;小&#39;,&#39;多&#39;,&#39;少&#39;,&#39;人&#39;,&#39;天&#39;,&#39;水&#39;,&#39;土&#39;,&#39;木&#39;,&#39;火&#39;,&#39;云&#39;);

            for($i=0;$i<$this->length;$i++){

                $l = count($arr)-1;               

                //文件编码为gbk需要转换

                //$rand_string[] = iconv(&#39;gb2312&#39;,&#39;utf-8&#39;,$arr[mt_rand(0,$l)]);

                $rand_string[] = $arr[mt_rand(0,$l)];

            }

           

        }

          $_SESSION[&#39;imgcode&#39;]=$rand_string;

          $_c = count($rand_string);

          for($i=0;$i<$_c;$i++)

        {

            if($this->text == 1){

            $rand_string[$i] = strtoupper($rand_string[$i]);

            }

                   

            $c_fOntColor= $fontColor[mt_rand(0,4)];

            $y = $this->height-($this->height-$this->text_size)/2;

            $x = ($this->width-($this->text_size+2)*$this->length)/2;

            $y_pos = $i==0 ? $x : $i*($this->text_size+2)+$x;

            $c = mt_rand(0, 15);

            @imagettftext($im, $this->text_size, $c, $y_pos, $y, $c_fontColor, $this->font_file, $rand_string[$i]);

           

        }

    }

    /*

    * 生成线条

    */

    private function img_line(){

        $im = &$this->img;

        $img_width = $this->width;

        $img_height= $this->height;

            //背景横线

        $lineColor1 = imagecolorallocate($im, 0xda, 0xd9, 0xd1);

        for($j=3; $j<=$img_height-3; $j=$j+3)

        {

            imageline($im, 2, $j, $img_width - 2, $j, $lineColor1);

        }

       

        //背景竖线

        $lineColor2 = imagecolorallocate($im, 0xda,0xd9,0xd1);

        for($j=2;$j<$img_width-6;$j=$j+6)

        {

            imageline($im, $j, 0, $j+8, $img_height, $lineColor2);

        }

   

        //画边框

        if( $use_boder && $filter_type == 0 )

        {

            $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96);

            imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $bordercolor);

        }

    }

    /*

    * 生成输出

    */

    private function img_header(){

        header("Pragma:no-cache\r\n");

           header("Cache-Control:no-cache\r\n");

            header("Expires:0\r\n");

        if($this->img_type == &#39;jpg&#39;){

            header(&#39;Content-type: image/jpeg&#39;);

            imagejpeg($this->img);

        }else if($this->img_type == &#39;png&#39;){

            header(&#39;Content-type: image/png&#39;);

            imagepng($this->img);

        }else{

            header(&#39;Content-type: image/gif&#39;);

            imagegif($this->img);

        }

    }

}

 文章来源:http://www.3oom.com/blog/50.html


推荐阅读
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • 题目描述非常吸引人。每颗星星可以通过其在窗口的左下角和右上角位置构建两条扫描线,从而将问题转化为区间增减和求最大值的操作。需要注意的是,位于边界的星星不应计入结果,因此在处理时应分别对左右边界进行适当的增减调整。此外,利用线段树和离散化技术可以显著提高算法效率,确保在大规模数据下的性能表现。 ... [详细]
  • 本文探讨了如何在C#中实现USB条形码扫描仪的数据读取,并自动过滤掉键盘输入,即使不知道设备的供应商ID(VID)和产品ID(PID)。通过详细的技术指导和代码示例,展示了如何高效地处理条形码数据,确保系统能够准确识别并忽略来自键盘的干扰信号。该方法适用于多种USB条形码扫描仪,无需额外配置设备信息。 ... [详细]
  • Vuex 实战进阶:构建高效笔记本应用(第二篇)
    在上一篇文章中,我们初步探讨了 Vuex 在该项目中的应用。本文将深入解析整个项目的架构设计。首先回顾 `main.js` 的内容,然后重点分析 `App.vue` 文件,其中引入了 `Toolbar.vue` 和 `NodeList.vue` 组件,详细说明它们在应用中的作用和交互方式。通过这些组件的协同工作,我们将展示如何构建一个高效且响应迅速的笔记本应用。 ... [详细]
  • 本文首先对信息漏洞的基础知识进行了概述,重点介绍了几种常见的信息泄露途径。具体包括目录遍历、PHPINFO信息泄露以及备份文件的不当下载。其中,备份文件下载涉及网站源代码、`.bak`文件、Vim缓存文件和`DS_Store`文件等。目录遍历漏洞的详细分析为后续深入研究奠定了基础。 ... [详细]
  • 新年伊始,正是学习的最佳时机。本文全面解析了CK1957-Zookeeper的核心概念与实践技巧,旨在帮助初学者快速掌握这一深度学习工具。通过详细的理论讲解和实际操作示例,读者可以更好地理解Zookeeper的工作原理及其在分布式系统中的应用。无论是新手还是有一定基础的学习者,都能从中受益匪浅。 ... [详细]
  • 探究Oracle数据库字符集编码的详细方法与实践
    本文深入探讨了Oracle数据库字符集编码的详细方法与实践。首先,通过执行 `SELECT USERENV('language') FROM DUAL;` 查询服务端字符集编码。其次,通过在注册表中搜索 `NLS_LANG` 参数来查看客户端字符集编码。此外,文章还介绍了如何在不同场景下正确配置和转换字符集,以确保数据的一致性和完整性。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 扎克伯格透露:一种新型类皮肤材料可能加速“元宇宙”愿景实现
    Meta公司的人工智能团队与卡内基梅隆大学的科学家合作,开发出了一种厚度不足3毫米的可变形塑料材料,这种低成本的“皮肤”有望加速“元宇宙”愿景的实现。该材料具有高度的灵活性和响应性,能够模拟真实皮肤的触感,为虚拟现实和增强现实技术提供更加沉浸式的体验。 ... [详细]
  • 在Linux系统中,目录结构遵循文件系统层次标准(FHS),确保了系统的组织性和可维护性。其中,`/bin`目录是FHS要求必须存在的目录之一,主要存放了在单用户维护模式下仍可执行的基本命令和工具。这些命令不仅对root用户可用,普通用户也能使用,以确保系统在最小化运行状态下仍能进行基本的操作和管理。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 如何在Adobe After Effects中运用3D摄像机追踪技术实现动态视觉效果?
    欢迎观看After Effects中文版教程,本篇将深入探讨如何利用3D摄像机追踪技术在AE中创建生动的动态视觉效果。通过详细讲解3D摄像机追踪器的功能与应用,帮助用户掌握从基础设置到高级调整的全过程,从而在视频制作中实现更加逼真和立体的场景效果。 ... [详细]
  • 解决手机浏览器无法加载CSS文件的技术方法与常见问题分析
    针对手机浏览器无法加载CSS文件的问题,本文提出了几种有效的解决方案:首先,确保CSS文件路径正确无误;其次,统一CSS文件和网页的编码格式;最后,检查并修正文件后缀的MIME类型设置,以确保浏览器能够正确识别和解析CSS文件。此外,还探讨了可能导致该问题的其他常见原因,如缓存问题和服务器配置错误等。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • 如何清除Windows 11任务栏系统托盘图标的缓存?
    在Windows 11中,如何清除任务栏系统托盘图标的缓存?系统托盘图标的缓存与常规任务栏图标缓存有所不同,主要存储显示在任务栏通知区域的图标。通过重置该缓存,可以有效解决图标在Windows 11任务栏上不显示的问题。此外,定期清理这些缓存还有助于提升系统的整体性能和稳定性。 ... [详细]
author-avatar
ym_泳梅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有