qinggan 发表于 2009-8-18 11:00:30

验证码插件

原程序:基于PHPOK
Plugin文件代码:

<?php
#===========================================================
#        Filename: system/plugins/vcode_pi.php
#        Note        : 备注
#        Version : 3.0
#        Author: qinggan
#        Update: 2009-08-17
#===========================================================
if(!function_exists("Verification_code"))
{
        function Verification_code($session)
        {
                $x_size=90;
                $y_size=30;
                if(function_exists("imagecreate"))
                {
                        $aimg = imagecreate($x_size,$y_size);
                        $back = imagecolorallocate($aimg, 255, 255, 255);
                        $border = imagecolorallocate($aimg, 0, 0, 0);
                        imagefilledrectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $back);
                        $txt="0123456789";
                        $txtlen=strlen($txt);

                        $thetxt="";
                        for($i=0;$i<4;$i++)
                        {
                                $randnum=mt_rand(0,$txtlen-1);
                                $randang=mt_rand(-20,20);        //文字旋转角度
                                $rndtxt=substr($txt,$randnum,1);
                                $thetxt.=$rndtxt;
                                $rndx=mt_rand(2,7);
                                $rndy=mt_rand(0,9);
                                $colornum1=($rndx*$rndx*$randnum)%255;
                                $colornum2=($rndy*$rndy*$randnum)%255;
                                $colornum3=($rndx*$rndy*$randnum)%255;
                                $newcolor=imagecolorallocate($aimg, $colornum1, $colornum2, $colornum3);
                                imageString($aimg,5,$rndx+$i*21,5+$rndy,$rndtxt,$newcolor);
                        }
                        unset($txt);
                        $thetxt = strtolower($thetxt);
                        $session->set_userdata("login_vcode",md5($thetxt));
                        imagerectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $border);

                        $newcolor="";
                        $newx="";
                        $newy="";
                        $pxsum=100;        //干扰像素个数
                        for($i=0;$i<$pxsum;$i++)
                        {
                                $newcolor=imagecolorallocate($aimg, mt_rand(0,254), mt_rand(0,254), mt_rand(0,254));
                                imagesetpixel($aimg,mt_rand(0,$x_size-1),mt_rand(0,$y_size-1),$newcolor);
                        }
                        header("Pragma:no-cache");
                        header("Cache-control:no-cache");
                        header("Content-type: image/png");
                        imagepng($aimg);
                        imagedestroy($aimg);
                        exit;
                }
        }
}
?>
Controller代码

<?php
#===========================================================
#        Filename: system/application/controllers/vcode.php
#        Note        : 验证码
#        Version : 3.0
#        Author: qinggan
#        Update: 2009-08-17
#===========================================================
class Vcode extends Controller
{
        function Vcode()
        {
                parent::Controller();
        }

        function index()
        {
                $this->load->plugin("vcode");
                echo Verification_code($this->session);
        }
}
?>
模板代码(我这里使用的是Smarty,有所出入请自行修改噢)

<script type="text/javascript">
function reload_vcode(v)
{
        var url = "index.php/vcode/index/";
        var rand = Math.random();
        url += rand;
        v.src = url;
}
</script>
<div><img src="index.php/vcode" border="0" onclick="reload_vcode(this)" style="cursor:pointer;"></div>

wangwen208 发表于 2009-8-19 17:39:05

唉,ctl+v习惯了. 沙发

乌有 发表于 2009-8-25 15:29:28

楼主是不是发布过php cms的那位情感?

Hex 发表于 2009-8-25 15:30:45

情感CMS 我也用过,很轻量,很快速。

乌有 发表于 2009-8-25 17:17:03

本帖最后由 乌有 于 2009-8-25 17:22 编辑

搞明白了..
还要MD5对比..

qinggan 发表于 2009-9-1 11:51:54

晕菜~~PHPOK这东东仅适合用来做企业站的~~呵呵

Hex 发表于 2009-9-1 12:46:07

适合的永远是最好的。

sking 发表于 2010-3-24 17:06:02

这个插件很不错,不过有问题,其中用imageString函数生成的字符串的字体大小最大只能调到5,而我试用了别的函数:imagettftext,可是这个函数需要导入一个字体文件,并且还不能用http://开头的,只能使用相对路径,但在CI里又用不了相对路径,请问有什么好的方法吗?我的目的就是使得到的验证码图片里的文字字体大点,谢谢!

liangpz521 发表于 2010-12-30 15:37:35

这个东东不错的 很实用的

partyisover 发表于 2012-11-15 21:11:31

帅啊
页: [1] 2
查看完整版本: 验证码插件