有关PHP在网络编程中,写验证码的问题

有的网页中登陆要输入验证码。但是输入错了后,验证码会重新换一个。请问这种功能怎么实现的啊?最好上PHP代码或者javascript代码... 有的网页中登陆要输入验证码。但是输入错了后,验证码会重新换一个。请问这种功能怎么实现的啊?
最好上PHP代码或者javascript代码
展开
 我来答
蓝风紫电
推荐于2016-11-10 · TA获得超过806个赞
知道小有建树答主
回答量:785
采纳率:100%
帮助的人:542万
展开全部

验证码一般是一个字符串,由数字与字母组成,如果单纯显示在页面上,很容易用程序截取到,没有起到验证的作用,所以把这个字符串用图片展示出来,加上背景再对各个字符的角度和颜色处理下,这样外界程序就不能截取到了,只能由人眼观看判断才能别,这就起到了验证作用。

当客户端访问时,服务端随机生成这样一个字符串后,会存到session中,然后再合成到图片上,客户端再显示,用户输入验证码会发送到服务端,服务端把字符串与session存的值比对,正确就通过,不对就提示错误,客户端的验证码图片一般有事件,就时点击后给图片的地址加个随机数,这样服务端会生成一个新的验证码,供用户再次验证。

<?php 
class Code {
    private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
    private $code;//验证码
    private $codelen = 4;//验证码长度
    private $width = 80;//宽度
    private $height = 30;//高度
    private $img;//图形资源句柄
    private $font;//指定的字体
    private $fontsize = 16;//指定字体大小
    private $fontcolor;//指定字体颜色

    //构造方法初始化
    public function __construct() {
        $this->font = dirname(__FILE__).'/../data/font/arial.ttf';//注意字体路径要写对,否则显示不了图片
    }

    //生成随机码
    private function createCode() {
        $_len = strlen($this->charset)-1;
        for ($i=0;$i<$this->codelen;$i++) {
            $this->code .= $this->charset[mt_rand(0,$_len)];
        }
    }

    //生成背景
    private function createBg() {
        $this->img = imagecreatetruecolor($this->width, $this->height);
        $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
        imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
    }

    //生成文字
    private function createFont() {
        $_x = $this->width / $this->codelen;
        for ($i=0;$i<$this->codelen;$i++) {
            $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
            imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
        }
    }

    //生成线条、雪花
    private function createLine() {
        //线条
        for ($i=0;$i<6;$i++) {
            $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
            imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
        }
        //雪花
        for ($i=0;$i<100;$i++) {
            $color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
            imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
        }
    }

    //输出
    private function outPut() {
        header('Content-type:image/png');
        imagepng($this->img);
        imagedestroy($this->img);
    }

    //对外生成
    public function doimg() {
        $this->createBg();
        $this->createCode();
        $this->createLine();
        $this->createFont();
        $this->outPut();
    }

    //获取验证码
    public function getCode() {
        return strtolower($this->code);
    }

}
追问
嗯嗯,这些我知道。
生成验证码、点击提片换一张新的验证码,这些功能有。
现在就一个细节问题。就是一个小细节。
当输入验证码时,如果输错了,就显示“验证码错误”//(这段功能已经实现)
并且自动生成一个新的验证码。就是自动生成新的验证码该怎么弄?我的函数就是
如果验证码输入错了,光显示输入错了,但是验证码还是原来那个。没变(除非
点击图片才新换一个验证码),我想输错了验证码自动换一个。
追答
点击后给图片的地址加个随机数

例如图片的地址 是a.php
随机一个地址a.php?t=0.1233465345345,这样服务端就认为这是一个新的访问,从而生成新的验证码
摩杜云
2024-07-09 广告
判断一个发送邮件api公司的好坏,不只是看价格,还要考虑很多因素。建议可以多对比几个看看。您可以到摩杜云了解下。摩杜云成立于2019年,依托于公司多年技术沉淀和强大的云计算研发实力,面向全世界各个国家和地区、企业组织和个人开发者,提供全球的... 点击进入详情页
本回答由摩杜云提供
匿名用户
2015-03-12
展开全部
你这问题也没有问清楚啊!
追问
生成验证码、点击提片换一张新的验证码,这些主要的功能有。
现在就一个细节问题。就是一个小细节。
当输入验证码时,如果输错了,就显示“验证码错误”//(这段功能已经实现)
并且自动生成一个新的验证码。就是自动生成新的验证码该怎么弄?我的函数就是
如果验证码输入错了,光显示输入错了,但是验证码还是原来那个。没变(除非
点击图片才新换一个验证码),我想输错了验证码自动换一个。
追答
用js啊,如果验证码错误, 用js去触发验证码图片的点击事件啊!
或者干脆用js给验证码图片刷新路径
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0050c69
2015-03-12 · TA获得超过1642个赞
知道小有建树答主
回答量:1454
采纳率:42%
帮助的人:444万
展开全部
Google reCAPTCHAs
追问
不懂额。。。。
能上一段示例代码嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吉人723
2015-03-12 · 超过13用户采纳过TA的回答
知道答主
回答量:18
采纳率:0%
帮助的人:16.3万
展开全部
楼上回答的很清楚。。。赞一个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式