动态验证码的制作

Posted zhouwanqiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态验证码的制作相关的知识,希望对你有一定的参考价值。

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

?>

 

以上是关于动态验证码的制作的主要内容,如果未能解决你的问题,请参考以下文章

django + PIL 生成网页动态验证码

动态验证码制作(RandomCodeImage )

Java验证码的jar制作

简易验证码的制作

python web框架Flask——图形验证码及验证码的动态刷新

php验证码的制作