博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证码的封装
阅读量:7105 次
发布时间:2019-06-28

本文共 1626 字,大约阅读时间需要 5 分钟。

<?php

//验证码的封装(宽 高 数字 字母 数字和字母混合 干扰线 干扰点 背景色 字体颜色)

  verify();

    function verify($width = 100,$height = 40,$num = 5,$type = 3)

    {

        //1.装备画布

        $image = imagecreatetruecolor($width,$height);

        //2.生成颜色

        

        //3.设置字符串

        $string = '';

        switch($type)

        {

            case 1:

                //纯数字

                $str = '0123456789';

                //随机打乱字符串里的所有字符并截取字符串

                $string = substr(str_shuffle($str),0,$num);

            break;

            

            case 2:

                //纯字母

                //创建一个a-z的数组

                $arr = range('a','z');

                //把数组里的元素重新排序

                shuffle($arr);

                //截取元素形成一个新的数组

                $tmp = array_slice($arr,0,$num);

                //将数组转换成一个字符串

                $string = join('',$tmp);

            break;

            

            case 3:

                //数组和字母混合

                $str = '123456789abcdefghgklmnopqrstvuwxyzABCDEFGHIJKLMNOPQRSTVUWXYZ';

                //随机打乱字符串里的所有字符并截取字符串

                $string = substr(str_shuffle($str),0,$num);

            break;

        }

        

        //给背景颜色填充浅色

        imagefilledrectangle ($image,0,0,$width,$height,lightColor($image));

        

        //4.写字

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

        {

            $x = ($width/$num)*$i;

            $y = mt_rand(10,$height-20);

            imagechar($image,5,$x,$y,$string[$i],deepColor($image));

        }

        //5.干扰线(点)

        //线

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

        {

            imagearc($image,mt_rand(10,$width),mt_rand(10,$height),mt_rand(10,$width),mt_rand(10,$height),mt_rand(0,10),mt_rand(0,270),deepColor($image));

        }

        //点

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

        {

            imagesetpixel($image,mt_rand(0,$width),mt_rand(0,$height),deepColor($image));

        }

        

        //6.指定输出的类型

        header('Content-type:image/png');

        //7.输出图片

        imagepng($image);

        //8.销毁资源

        imagedestroy($image);

        

        return $string;

    }

    

    //浅的颜色封装函数

    function lightColor($image)

    {

        return imagecolorallocate ($image,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));//0-255值越小颜色越深

    }

    

    //深的颜色封装函数

    function deepColor($image)

    {

        return imagecolorallocate($image,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));

    }

转载于:https://www.cnblogs.com/cqlb/p/9106231.html

你可能感兴趣的文章
linux -- Ubuntu network-manager
查看>>
SharePoint 2013 状态机工作流之日常报销示例
查看>>
坐标旋转变换公式的推导
查看>>
集合已修改 ;可能无法执行枚举操作 Dictionary
查看>>
裴蜀定理(贝祖定理)及证明
查看>>
不要再被骗了------QQ盗号原理大揭秘
查看>>
python list 中 remove 的骚操作/易错点
查看>>
UITabBarController 标签栏控制器
查看>>
以UIWebView的方式来播放网络多媒体档案
查看>>
UIView与CALayer的区别,很详细
查看>>
神经网络
查看>>
深入浅出多线程系列之一:简单的Thread(转)
查看>>
mysql优化学习(一)
查看>>
java 配置及Eclipse安装
查看>>
0427Python基础-运算符-编码
查看>>
linux + qt 环境搭建
查看>>
如何选择Html.RenderPartial和Html.RenderAction
查看>>
JS常用方法总结,及jquery异步调用后台方法实例
查看>>
JQuery获取input checkbox
查看>>
【PHP】Windows下配置用mail()发送邮件
查看>>