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

本文共 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

你可能感兴趣的文章
百度地图给map添加右键菜单(判断是否为marker)
查看>>
线程的状态
查看>>
CentOS 6.4上通过yum安装Nagios-3.5.0 [服务端/server端]
查看>>
ODL Beryllium (Be) - The Fourth Release of OpenDaylight PRODUCTION-READY OPEN SDN PLATFORM
查看>>
Cortex-M0 ARM-GCC 编译链接选项
查看>>
到达一个数字的最少移动步数,Reach a Number
查看>>
JFinal中EhCache利用RMI方式分布式缓存配置
查看>>
windows搭建React-native环境之图文教程
查看>>
谈传奇世界3D版
查看>>
【d3js】结合pack和chord图进行多维数据展示
查看>>
最详细的activity的启动模式
查看>>
struts2 的 属性设置说明
查看>>
C++ 代码 获取当前目录
查看>>
关于文件的UTF-8的BOM标记问题记录
查看>>
flex 去掉combobox中的竖直分割线
查看>>
初心大陆-----python宝典 第一章
查看>>
quota+samba实现共享配额
查看>>
HG8240电信光猫禁用TR069之修改配置法
查看>>
jquery焦点图片左右滑动切换特效代码
查看>>
bash大括号参数扩展(Parameter Expansion)
查看>>