鹿城哥 發表於 2023-6-4 00:00:00

解析dedeCMS验证码的实现代码

<p>
        如下所示:</p>
<p class="codetitle">
        <span><u>复制代码</u></span> 代码如下:</p>
<p class="codebody">
        <br>
        &lt;?php<br>
        $rndstring = '';<br>
        for($i=0; $i&lt;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'] &gt; 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&lt;=16;$j=$j+3)<br>
         {<br>
          imageline($im,2,$j,48,$j,$lineColor1);<br>
         }<br>
         for($j=2;$j&lt;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&lt;$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 -&gt; jpg -&gt;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>
        ?&gt;</p>
<p>
         </p>
頁: [1]
查看完整版本: 解析dedeCMS验证码的实现代码