解析dedeCMS验证码的实现代码
<p>如下所示:</p>
<p class="codetitle">
<span><u>复制代码</u></span> 代码如下:</p>
<p class="codebody">
<br>
<?php<br>
$rndstring = '';<br>
for($i=0; $i<4; $i++) $rndstring .= chr(mt_rand(65,90));<br>
//如果支持GD,则绘图<br>
if(function_exists("imagecreate"))<br>
{<br>
//Firefox部份情况会多次请求的问题,5秒内刷新页面将不改变session<br>
$ntime = time();<br>
if(empty($_SESSION['dd_ckstr_last']) || empty($_SESSION['dd_ckstr']) || ($ntime - $_SESSION['dd_ckstr_last'] > 5))<br>
{<br>
$_SESSION['dd_ckstr'] = strtolower($rndstring);<br>
$_SESSION['dd_ckstr_last'] = $ntime;<br>
}<br>
$rndstring = $_SESSION['dd_ckstr'];<br>
$rndcodelen = strlen($rndstring);<br>
//创建图片,并设置背景色<br>
$im = imagecreate(50,20);<br>
ImageColorAllocate($im, 255,255,255);<br>
//背景线<br>
$lineColor1 = ImageColorAllocate($im,240,220,180);<br>
$lineColor2 = ImageColorAllocate($im,250,250,170);<br>
for($j=3;$j<=16;$j=$j+3)<br>
{<br>
imageline($im,2,$j,48,$j,$lineColor1);<br>
}<br>
for($j=2;$j<52;$j=$j+(mt_rand(3,6)))<br>
{<br>
imageline($im,$j,2,$j-6,18,$lineColor2);<br>
}<br>
//画边框<br>
$bordercolor = ImageColorAllocate($im, 0x99,0x99,0x99);<br>
imagerectangle($im, 0, 0, 49, 19, $bordercolor);<br>
//输出文字<br>
$fontColor = ImageColorAllocate($im, 48,61,50);<br>
for($i=0;$i<$rndcodelen;$i++)<br>
{<br>
$bc = mt_rand(0,1);<br>
$rndstring[$i] = strtoupper($rndstring[$i]);<br>
imagestring($im, 5, $i*10+6, mt_rand(2,4), $rndstring[$i], $fontColor);<br>
}<br>
header("Pragma:no-cache/r/n");<br>
header("Cache-Control:no-cache/r/n");<br>
header("Expires:0/r/n");<br>
//输出特定类型的图片格式,优先级为 gif -> jpg ->png<br>
if(function_exists("imagejpeg"))<br>
{<br>
header("content-type:image/jpeg/r/n");<br>
imagejpeg($im);<br>
}<br>
else<br>
{<br>
header("content-type:image/png/r/n");<br>
imagepng($im);<br>
}<br>
ImageDestroy($im);<br>
exit();<br>
}<br>
else<br>
{<br>
//不支持GD,只输出字母 ABCD<br>
$_SESSION['dd_ckstr'] = "abcd";<br>
$_SESSION['dd_ckstr_last'] = '';<br>
header("content-type:image/jpeg/r/n");<br>
header("Pragma:no-cache/r/n");<br>
header("Cache-Control:no-cache/r/n");<br>
header("Expires:0/r/n");<br>
$fp = fopen("data/vdcode.jpg","r");<br>
echo fread($fp,filesize("data/vdcode.jpg"));<br>
fclose($fp);<br>
exit();<br>
}<br>
?></p>
<p>
</p>
頁:
[1]