php之验证码

验证码几乎是每个网站都要用到的东西,它的存在也是为了防止黑客恶意注册或者恶意破解用户密码等。现在一般常见的验证码有有数字型,数字+字母型,汉字型,算术型这几种类型。下面介绍的是数字+字母类型的验证码。在此之前我们需要知道验证码的原理:也就是通过php扩展的GD库,生成一张带验证码的图片,并将验证码保存在session中,最后再与表单提交的验证码数据作对比。所以,首先我们要做的是需要打开GD库,在php.ini中,找到extension=php_gd2.dll,去掉前面的分号即可(分号代表注释)。然后话不多说,直接上代码。

<?php
             session_start();
             //这里我是生成4个数字/字母,可以自己修改
             for($i=0;$i<4;$i++)
             {
                 $nmsg .=dechex(mt_rand(0,15));
             }
             //存入session中
             $_SESSION['code']=$nmsg;

             //创建一张图片,设置高度和宽度
             $width=75;
             $height=25;
             $img=imagecreatetruecolor($width, $height);
             //选择图标的颜色颜色
             $imgcolor=imagecolorallocate($img, 255, 255, 255);
             //填充颜色
             imagefill($img, 0, 0, $imgcolor);
             //随机画出6个线条
             for($i=0;$i<6;$i++)
             {
                 //设置随机色
                 $imgcolor=imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
                 imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$imgcolor);
             }
             //随机画出100个雪花
             for($i=0;$i<100;$i++)
             {
                 $imgcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
                 imagestring($img, 1, mt_rand(0,$width), mt_rand(0,$height), "*", $imgcolor);
             }
             //输出验证码
             for($i=0;$i<strlen($_SESSION['code']);$i++)
             {
                 $imgcolor=imagecolorallocate($img, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));
                 //这里是把每个验证码的位置划分为四个区域,这样才能正确有序地显示验证码
                 imagestring($img, 5, $i*$width/4+mt_rand(0,10), mt_rand(1,$height/2), $_SESSION['code'][$i], $imgcolor);
             }
             //输出图像

             header('Content-Type:image/png');
             imagepng($img);
             //销毁图像
             imagedestroy($img);

?>

以上就是验证码的代码,如果图片显示不出来的话,那最好是在header('Content-Type:image/png');这行代码的前面添加上ob_clean(),它的作用是丢弃输出缓冲区的内容,哪怕你只是在你的生成验证码代码的前面输出了一个空行,验证码也无法显示出来的,所以这里需要注意一下,最好加上ob_clead()。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值