191145686 发表于 2017-4-11 11:46:59

php的验证码(含数字和字母)

四位的。随即产生数字或字母,颜色随机产生。位置可变
session_start();
header("Content-type: image/png");

$im = @imagecreatetruecolor(100, 50);//设置画布的大小
$background_color = imagecolorallocate($im, 200, 200, 200);
imagefill($im, 0, 0, $background_color);//填充画布的背景色

$rand="";
$str="";
for($i=0;$i<4;$i++){
    $num = rand(0,15);//产生1-15的随机数
    if($num>=10){ //如果大于10的话 就转换成16进制,也就是字母的形式
      $num = dechex($num);
    }
    $rand.=$num."|";
}
$arry = str_split($rand);
$num1 = $arry;
$num2 = $arry;
$num3 = $arry;
$num4 = $arry;
$str = $num1.$num2.$num3.$num4;//把分别产生的数字或者字母拼接成字符串.最后要把这个字符串存入session
$x1 = rand(70,90);//随即产生的数字代表验证码上的数字(字母)的x坐标。固定某个范围,以免重叠
$x2=rand(50,60);
$x3=rand(30,40);
$x4 = rand(10,20);
imagettftext($im, 20, 0,$x1, rand(30,35), imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)),"arial.ttf", $num4);
imagettftext($im, 20, 0,$x2, rand(30,35), imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)),"arial.ttf", $num3);
imagettftext($im, 20, 0,$x3, rand(30,35), imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)),"arial.ttf", $num2);
imagettftext($im, 20, 0,$x4, rand(30,35), imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)),"arial.ttf", $num1);
//imagestring($im, 5, $x1, rand()%30, $num4, imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)));
//imagestring($im, 5, $x2, rand()%30, $num3, imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)));
//imagestring($im, 5, $x3, rand()%30, $num2, imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)));
//imagestring($im, 5, $x4, rand()%30, $num1, imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)));imagestring也可以用 但是这个不能改变字体的大小

for($i=0;$i<200;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%100 , rand()%50 , $randcolor);
}
$_SESSION["str"] = $str;
imagepng($im);
imagedestroy($im);
页: [1]
查看完整版本: php的验证码(含数字和字母)