老师,我直接用的你的源代码,可是有的时候出现的数字是2个,有的时候是3个,?
2014-08-15
3 回答
<?php
require_once 'string.func.php';
//通过GD库做验证码
function verifyImage($type=1,$length=4,$pixel=50,$line=5,$sess_name = "verify"){
session_start();
//创建画布
$width = 80;
$height = 28;
$image = imagecreatetruecolor ( $width, $height );//创建画布
$white = imagecolorallocate ( $image, 255, 255, 255 );//画布颜色
$black = imagecolorallocate ( $image, 0, 0, 0 );//画笔颜色
imagefilledrectangle ( $image, 1, 1, $width - 2, $height - 2, $white );
//用填充矩形填充画布
$chars = buildRandomString( $type, $length );//产生随机字符串
$_SESSION [$sess_name] = $chars;//用SESSION记忆产生的字符串
//$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );
$fontfiles = array ("1.TTF","2.TFF" );
//由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体
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 );//向画布image中写入字符串
}
if ($pixel) {
for($i = 0; $i < 50; $i ++) {
imagesetpixel ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $black );
}
}
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 );
}
}
header ( "content-type:image/gif" );
imagegif ( $image );
imagedestroy ( $image );
}
*/
function buildRandomString($type=1,$length=4){//类型,长度
if ($type == 1) {
$chars = join ( "", range ( 0, 9 ) );//JOIN以空格连接0-9之间形成的字符串
} elseif ($type == 2) {
$chars = join ( "", array_merge ( range ( "a", "z" ), range ( "A", "Z" ) ) );
} elseif ($type == 3) {
$chars = join ( "", array_merge ( range ( "a", "z" ), range ( "A", "Z" ), range ( 0, 9 ) ) );
}
if ($length > strlen ( $chars )) {
exit ( "字符串长度不够" );
}
$chars = str_shuffle ( $chars );
return substr ( $chars, 0, $length );
}
就是两个函数。 调用后,出现的验证码和老师展示的用偏差啊,麻烦老师看看了。谢谢。
举报