美文网首页
GD库——校验码简单封装函数

GD库——校验码简单封装函数

作者: BULL_DEBUG | 来源:发表于2018-04-12 18:30 被阅读6次

    前言:下面给出校验码封装函数代码,刚学代码比较简单;具体看gitHub

    /**
     * 宽 高 字母 数字 字母数字混合 干扰线 干扰点 背景色 字体颜色
     * @param int $width
     * @param int $height
     * @param int $num 验证码长度
     * @param int $type 0-9 a-z
     */
    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:
                $arr = range('a', 'z');
                shuffle($arr);
                $tmp = array_slice($arr, 0, $num);
                $string = join('', $tmp);
                break;
            case 3:
                // 0-9 a-z A-Z
                $str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ';
                $string = substr(str_shuffle($str), 0, $num);
                break;
        }
    //    echo $string;
        // 给背景颜色填充浅色
        imagefilledrectangle($image, 0, 0, $width, $height, lightColor($image));
        // 4、 开始写字
        for ($i = 0; $i < $num; $i++) {
            $x = floor($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);
        //销毁
        imagedestroy($image);
    
        return $string;
    }
    
    /**
     *  浅色
     * @param $image
     * @return int
     */
    function lightColor($image) {
        return imagecolorallocate($image, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
    }
    
    /**
     * 深色
     * @param $image
     * @return int
     */
    function deepColor($image) {
        return imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
    }
    

    相关文章

      网友评论

          本文标题:GD库——校验码简单封装函数

          本文链接:https://www.haomeiwen.com/subject/rqyfkftx.html