PHP如何生成一个简单的验证码



代码如下:

/*
获取随机验证码
@param $codeNum 验证码个数
@param $type 验证码类型 0:数字 1:数字+小写字母 2:数字+大小写字母
*/
function getCode($codeNum = 4, $type = 0)
{
    $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $subNum = array(9, 35, strlen($str) - 1);//随机验证码结束位置
    $code = "";
    for ($i = 0; $i < $codeNum; $i++) {
        $code .= $str[rand(0, $subNum[$type])];
    }
    return $code;
}

/*
创建验证码
@param $width 验证码图片宽度
@param $heigth 验证码图片高度
@param $codePath 验证码文件默认保存路径
@param $codeName 验证码文件名字
@param $pixel 干扰点数量
@param $line 干扰线数量
*/
function createCode($codeNum = 4, $type = 0)
{
    $width = $codeNum * 20;
    $heigth = 30;
    $codePath = "./image/code/";//验证码图片文件保存路径
    $codeName = time() . ".png";//验证码图片文件名为当前时间戳
    $pixel = 200;//干扰点数量
    $line = 5;
    $img = ImageCreateTrueColor($width, $heigth) or die("无法创建新的GD图像流");//创建一个新的真彩图像
    $bgColor = imagecolorallocate($img, 200, 200, 200);//图像背景颜色
    //随机颜色,用于填充验证码
    $color[] = imagecolorallocate($img, 255, 128, 64);
    $color[] = imagecolorallocate($img, 128, 64, 0);
    $color[] = imagecolorallocate($img, 0, 128, 0);
    $color[] = imagecolorallocate($img, 128, 128, 0);
    $color[] = imagecolorallocate($img, 128, 128, 64);
    $color[] = imagecolorallocate($img, 0, 0, 255);
    $color[] = imagecolorallocate($img, 64, 0, 64);
    $color[] = imagecolorallocate($img, 128, 0, 255);
    imagefill($img, 0, 0, $bgColor);//填充图像
    //添加边框
    imagerectangle($img, 0, 0, $width - 1, $heigth - 1, $color[rand(0, 7)]);
    //添加随机干扰点
    for ($i = 0; $i < $pixel; $i++) {
        $pixelColor = imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255));
        imagesetpixel($img, rand(0, $width), rand(0, $heigth), $pixelColor);
    }
    //添加随机干扰线
    for ($i = 0; $i < $line; $i++) {
        $lineColor = imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255));
        imageline($img, rand(0, $width), rand(0, $heigth), rand(0, $width), rand(0, $heigth), $lineColor);
    }
    //获取验证码
    $code = getCode($codeNum, $type);
    //添加验证码文字
    for ($i = 0; $i < $codeNum; $i++) {
        imagettftext($img, 18, rand(-40, 40), 8 + (18 * $i), 24, $color[rand(0, 7)], "BELL.TTF", $code[$i]);
    }
    //以 PNG 格式将图像输出到浏览器或文件
    imagepng($img, $codePath . $codeName);
    //销毁一图像
    imagedestroy($img);
    return $codeName;
}

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - PHP如何生成一个简单的验证码


愿你勿忘初心,并从一而终