<img width="100" height="50" alt="vcode" src="./yanzhengma.php" onclick="refreshCode(this)">
<script type="text/javascript">
function refreshCode(obj){
//obj.src="./yanzhengma.php";
//为适配IE浏览器的缓存遗留问题,在?后加上随机数参数
obj.src="./yanzhengma.php?rand="+Math.random();
}
</script>
<?php
session_start();
$width=200;
$height=100;
$style=0;//0为数字字母混合式,1为纯数字式,2为纯字母式
$length=4;//验证码长度
$fontsize=30;//验证码字体大小
$fontfile='./MSYH.TTF';//验证码字体文件(.ttf)所在的路径
//1.创建画布
$img=imagecreatetruecolor($width, $height);
//2.分配颜色
function bgcolor($img){ //背景色,浅色
return imagecolorallocate($img,mt_rand(200,250),mt_rand(200,250),mt_rand(200,250));
}
function fontcolor($img){ //前景色,深色
return imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
}
//3.操作图像
//先将画布填充为背景色
imagefilledrectangle($img,0,0,$width,$height,bgcolor($img));
//准备随机字符串
$code="";
switch ($style) {
case 0:
$arr=array_merge(range(0, 9),range("a", "z"),range("A", "Z"));
$str=join("", $arr);
$code=substr(str_shuffle($str),0,$length);
break;
case 1:
$str=implode("",range(0, 9));
$code=substr(str_shuffle($str),0,$length);
break;
case 2:
$arr1=range("a", "z");
$arr2=range("A", "Z");
$arr=array_merge($arr1,$arr2);
$str=join("",$arr);
$code=substr(str_shuffle($str),0,$length);
break;
}
//将字符串依次写入到画布中
/*
*将画布分为4等分,在每个等分里面各显示一个字符;每个字符的起始x坐标+15为与各等分的左边距
imagettftext($img,20,0,0+15,50,fontcolor($img),'./MSYH.TTF',$code{0});
imagettftext($img,20,0,50+15,50,fontcolor($img),'./MSYH.TTF',$code{1});
imagettftext($img,20,0,100+15,50,fontcolor($img),'./MSYH.TTF',$code{2});
imagettftext($img,20,0,150+15,50,fontcolor($img),'./MSYH.TTF',$code{3});
*/
for ($i=0;$i<$length;$i++){
imagettftext($img,$fontsize,mt_rand(-30,30),(($width/$length)*$i+($width/$length)/3),mt_rand(($height*2/4),($height*3/4)),fontcolor($img),$fontfile,$code{$i});
}
//加干扰素
for ($j=0;$j<200;$j++){
imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height),fontcolor($img));
}
for ($j=0;$j<6;$j++){
imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),fontcolor($img));
}
//4.通知浏览器以图像的形式展现
header("content-type:image/png");
//5.显示图像
imagepng($img);
//6.回收资源
imagedestroy($img);
//将$code的值写入session中,便于页面对照
$_SESSION['vcode']=$code;
?>