PHP 验证码 $_POST[]
for($i=0;$i<$num;$i++){ $x=rand(1,8)+$imagewidth*$i/4; $y=rand(1,$imageheight/4); $font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255)); // 生成随机颜色 $authnum=rand(1,9); $vcodes.=$authnum; imagestring($im, 15, $x, $y, $authnum, $font); }
第一个问题 .你用$num=2试试 是不是还是四个数字?
$x的计算方式导致只能显示四个数字而已
第二个问题 我也不清楚到底是字符还是整数期待高人回答,但是可以当字符用也可以当整数用 这是PHP的魅力所在
第一个见楼上.
第二个字符串
你图片宽高已经固定了吧。。。
再看我一眼:
第一个问题 .你用$num=2试试 是不是还是四个数字?
$x的计算方式导致只能显示四个数字而已
第二个问题 我也不清楚到底是字符还是整数期待高人回答,但是可以当字符用也可以当整数用 这是PHP的魅力所在
修改$num<4之后确实发生了改变,但你能给我具体是怎么$x 限制的吗?
$x=rand(1,8)+$imagewidth*$i/4;
调整一下书写次序就清楚了
$x = $imagewidth / 4 * $i + rand(1,8);
其中:
$imagewidth / 4 把画布宽度分成 4 分
$imagewidth / 4 * $i 第 $i 个字符在画布上的起始位置
rand(1,8) 让起始位置再向有偏移若干点
当字符数超过 4 个的时候,并没有做任何限制,只是计算出的位置在画布以外。画了也白画
$x=rand(1,8)+$imagewidth*$i/4;
调整一下书写次序就清楚了
$x = $imagewidth / 4 * $i + rand(1,8);
其中:
$imagewidth / 4 把画布宽度分成 4 分
$imagewidth / 4 * $i 第 $i 个字符在画布上的起始位置
rand(1,8) 让起始位置再向有偏移若干点
当字符数超过 4 个的时候,并没有做任何限制,只是计算出的位置在画布以外。画了也白画
好像有点理解了,附带的问一下,如果想让生成的随机码里含有字母和数字,应该怎么改写?
希望大哥不吝赐教
$x=rand(1,8)+$imagewidth*$i/4;
调整一下书写次序就清楚了
$x = $imagewidth / 4 * $i + rand(1,8);
其中:
$imagewidth / 4 把画布宽度分成 4 分
$imagewidth / 4 * $i 第 $i 个字符在画布上的起始位置
rand(1,8) 让起始位置再向有偏移若干点
当字符数超过 4 个的时候,并没有做任何限制,只是计算出的位置在画布以外。画了也白画
好像有点理解了,附带的问一下,如果想让生成的随机码里含有字母和数字,应该怎么改写?
希望大哥不吝赐教
说真的如果你已经理解上边这个了 那只要看一下imagestring的几个参数就应该明白这个问题
imagestring()的第五个参数就是指定写入什么东东
你先来个$str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
然后每次从中随机取出一个字不就好了?
$str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";for($i=0;$i<$num;$i++){ $x=rand(1,8)+$imagewidth*$i/4; $y=rand(1,$imageheight/4); $font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255)); // 生成随机颜色 $authnum=substr($str,rand(0,35),1);//从10个数+26个字母中随机选出一个 $vcodes.=$authnum; imagestring($im, 15, $x, $y, $authnum, $font); }
第一个问题 .你用$num=2试试 是不是还是四个数字?
$x的计算方式导致只能显示四个数字而已
第二个问题 我也不清楚到底是字符还是整数期待高人回答,但是可以当字符用也可以当整数用 这是PHP的魅力所在
仅代表世界人民感谢你一下。。。 ,马上给分!!