解析dedecms验证码的实现代码

如下所示:
复制代码代码如下所示:
< PHP
rndstring美元=;
为($我= 0;$i < 4;$我+ +)$ rndstring = CHR(mt_rand(65,90));
如果GD,那么绘图
如果(function_exists(画面欣赏))
{
Firefox的部分情况会被问多次,刷新页面在5秒内不会改变会话。
$ N倍=时间();
如果(空(美元_session { 'dd_ckstr_last ' })空(美元_session { 'dd_ckstr})| | | |($ N倍至_session { 'dd_ckstr_last} > 5))
{
_session美元{ 'dd_ckstr} = strtolower($ rndstring);
_session美元{ 'dd_ckstr_last} = $ N倍;
}
rndstring美元美元'dd_ckstr_session { } =;
rndcodelen美元= strlen($ rndstring);
创建一个图片,并设置背景色
$我=画面欣赏(50,20);
imagecolorallocate(合我,255255255);
背景/行
linecolor1美元= imagecolorallocate(合我,240220180);
linecolor2美元= imagecolorallocate(合我,250250170);
对于($ = 3;$ = 16;$ j = $ J + 3)
{
imageline(合我,2,J,48,J,linecolor1美元);
}
为($ J = 2;J<52;J = J +(mt_rand(3,6)))
{
imageline(合我,J,2,j-6,18美元,美元linecolor2);
}
绘制框
美元($我imagecolorallocate BorderColor =,0x99,0x99,0x99);
Imagerectangle(0, 0, 49美元,19美元的我,,边框颜色);
输出文本
字体颜色= imagecolorallocate美元(合我,48,61,50);
为($我= 0;美元美元美元我<< rndcodelen;i++)
{
公元前mt_rand美元=(0,1);
rndstring美元{ $我} = strtoupper($ rndstring {我});
imagestring(合我,5,我* 10 + 6,mt_rand(2,4),rndstring美元美元美元{我},字体颜色);
}
标题(杂注:无缓存/ R / );
页眉(缓存控件:无缓存;
标题(过期:0);
输出特定类型的图像格式,优先顺序是GIF - PNG
如果(function_exists(imagejpeg ))
{
页眉(内容类型:图像);
imagejpeg(为我);
}
其他的
{
页眉(内容类型:图像);
imagepng(为我);
}
销毁一图像(为我);
出口();
}
其他的
{
不支持GD,输出字母ABCD
_session美元{ 'dd_ckstr} =ABCD;
_session美元{ 'dd_ckstr_last} =;
页眉(内容类型:图像);
标题(杂注:无缓存/ R / );
页眉(缓存控件:无缓存;
标题(过期:0);
$ FP = fopen(数据 / vdcode .jpg
回声fread($ FP,文件大小(数据 / vdcode .jpg));
Fclose($ FP);
出口();
}
>