验证码的封装

<?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));

    }