首页 > 其他 > 详细

动态验证码的制作

时间:2018-07-13 10:45:59      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:随机   tco   mat   img   tex   lod   长度   边距   content   

<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;

?>

 

动态验证码的制作

标签:随机   tco   mat   img   tex   lod   长度   边距   content   

原文:https://www.cnblogs.com/zhouwanqiu/p/9303638.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号