动态验证码的制作
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; ?>
以上是关于动态验证码的制作的主要内容,如果未能解决你的问题,请参考以下文章