首页 > 后端开发 > php教程 > php使用for循环生成4位验证码只生成了3位

php使用for循环生成4位验证码只生成了3位

WBOY
发布: 2016-06-06 20:14:43
原创
1321 人浏览过

我是用php for循环生成验证码,经常出现有一位验证码没能生成的情况,希望了解问题的大神的帮忙看下代码,非常感谢!

<code><?php $image = imagecreatetruecolor(100,30);
$bgcolor = imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor);

// 生成干扰像素点
for ($i=0; $i < 200; $i++) {
    $pixelcolor = imagecolorallocate($image,rand(121,254),rand(121,254),rand(121,254));
    imagesetpixel($image,rand(1,99),rand(1,29),$pixelcolor);
}

    // 生成干扰直线
for ($i=0; $i < 4; $i++) {
    $linecolor = imagecolorallocate($image,rand(121,254),rand(121,254),rand(121,254));
    imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}

//生成验证码
for ($i=0; $i < 4; $i++) {
    $fontsize = 6;
    $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
    $data = 'abcdefghijkmnpqrstuvwxy3456789';
    $fontcontent = substr($data,rand(0,strlen($data)),1);
    $x = ($i*100/4)+rand(5,10);
    $y = rand(5,10);
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}

header('content-type:image/png');
imagepng($image);
imagedestroy($image);
?>
</code>
登录后复制
登录后复制

php使用for循环生成4位验证码只生成了3位
上图为生成效果

回复内容:

我是用php for循环生成验证码,经常出现有一位验证码没能生成的情况,希望了解问题的大神的帮忙看下代码,非常感谢!

<code><?php $image = imagecreatetruecolor(100,30);
$bgcolor = imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor);

// 生成干扰像素点
for ($i=0; $i < 200; $i++) {
    $pixelcolor = imagecolorallocate($image,rand(121,254),rand(121,254),rand(121,254));
    imagesetpixel($image,rand(1,99),rand(1,29),$pixelcolor);
}

    // 生成干扰直线
for ($i=0; $i < 4; $i++) {
    $linecolor = imagecolorallocate($image,rand(121,254),rand(121,254),rand(121,254));
    imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}

//生成验证码
for ($i=0; $i < 4; $i++) {
    $fontsize = 6;
    $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
    $data = 'abcdefghijkmnpqrstuvwxy3456789';
    $fontcontent = substr($data,rand(0,strlen($data)),1);
    $x = ($i*100/4)+rand(5,10);
    $y = rand(5,10);
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}

header('content-type:image/png');
imagepng($image);
imagedestroy($image);
?>
</code>
登录后复制
登录后复制

php使用for循环生成4位验证码只生成了3位
上图为生成效果

1个可能的原因

$fontcontent = substr($data,rand(0,strlen($data)),1);

这里改为

$fontcontent = substr($data,rand(0,strlen($data)-1),1);

原因是php的rand方法为闭区间,前后分别为最小值和最大值,都可以出现

试试strlen($data)-1

$fontcontent = substr($data,rand(0,strlen($data)),1);这行

艾玛我点进来的时候还没有回复。跟楼上雷同,我不是故意的。
大家给楼上点赞吧。

相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板