为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我生成的验证码,始终不是4位验证码,求解!

<?php

/*** 验证码 ***/

require_once'string.func.php';

//通过GD库做验证码

function verifyImage($type=1, $length=4, $pixel=0, $line=0, $sess_name="verify"){

    session_start();

    //1. 创建画布

    $width = 80;

    $height = 28;

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

    $white = imagecolorallocate($image, 255 ,255 ,255);//白色填充画布

    $black = imagecolorallocate($image, 0, 0, 0);

 

    //2. 用填充矩形填充画布

    imagefilledrectangle($image, 1, 1, $width-2, $height-2, $white);

 

    //3. 获取随机验证码

    $chars = buildRandomString($type, $length);

 

    //4. 保存到session

    $_SESSION[$sess_name] = $chars;

 

    $fontfiles = array(

                    "CONSTANI.TTF",

                    "simfang.ttf",

                    "simhei.ttf",

                    "simkai.ttf",

                    "simsun.ttc",

                    "FZLTCXHJW.TTF",                

                );

    //5. 生成验证码

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

        $size = mt_rand(14, 18);// 字体大小变化

        $angle = mt_rand(-15, 15);// 倾斜角度变化

        $x = 5 + $i * $size;// 位置变化

        $y = mt_rand(20, 26);

        // 随机字体

        $fontfile = "../fonts/".$fontfiles[mt_rand(0, count($fontfiles)-1)];

        // 随机字体颜色

        $color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));

        $text = substr($chars, $i, 1);// 每次取一个字符

        imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);

    }

 

    //6. 干扰点

    if($pixel){

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

            imagesetpixel($image, mt_rand(0, $width-1), mt_rand(0, $height-1), $black);

        }

    }

 

    //7. 干扰线

    if($line){

        for($i=1; $i<$line; $i++){

            $color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80,200), mt_rand(90,180));

            imageline($image, mt_rand(0,$width-1), mt_rand(0,$height-1), mt_rand(0,$width-1), mt_rand(0,$height-1), $color);

        }

    }


    ob_clean();

    //8. 输出到服务端

    header("content-type:image/gif");// 输出图片类型

    imagegif($image);

    imagedestroy($image);// 销毁图片内存

     

}

//verifyImage();


正在回答

1 回答

字体的原因,在我的机子上,更换字体路径和$fontfiles数组内容后,显示正常

0 回复 有任何疑惑可以回复我~
#1

caidick 提问者

非常感谢!换过字体解决了。
2016-10-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
手把手教你实现电商网站后台开发
  • 参与学习       117283    人
  • 解答问题       1999    个

手把手教你用PHP搭建电子商务平台,由浅入深教你搭建电商系统

进入课程

为什么我生成的验证码,始终不是4位验证码,求解!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信