0 0

关于 验证码算法的 问题5

本人的脑子不 怎么好使,写了一个关于验证码的算法,但是总是不能达到理想的效果,
验证码的算法大致采用的随机 4 个 random()  算法,来产生 4 位验证码,但是,在服务器不重启的条件下,不管怎么刷新验证页面,所得到的验证码都是一样,

我想问一下,我的思路有什么问题,是什么地方出了错误?
问题补充:
说的有道理,但是我对你回答的


  “...应用设定的Session时效.认为你在恶意刷新,而没有响应你的请求 ?”
中的“Session时效”,感觉好深奥,不懂,能不是解释一下,具体指的是什么东西?

是什么意思?
2008年7月10日 13:10

2个答案 按时间排序 按投票排序

0 0

采纳的答案

生成随机数

public class DrawRandNumber
{

    private static BufferedImage image = new BufferedImage(50, 20, 1);
    private static DrawRandNumber instance = new DrawRandNumber();
    public static final Random RANDOM = new Random();

    private DrawRandNumber()
    {
    }

    @SuppressWarnings("unused")
	private void init()
    {
    }

    public static DrawRandNumber getInstance()
    {
        return instance;
    }

    public synchronized String writeRandNumber(int bits, int to, HttpServletRequest request)
        throws IOException
    {
        String rand = getRandNumber(bits, to);
        setSession(request, rand);
        return rand;
    }

    public synchronized Image drawRandNumber(int bits, int to, HttpServletRequest request)
    {
        String rand = getRandNumber(bits, to);
        Graphics g = image.getGraphics();
        refreshBgColor(g);
        g.setColor(getRandColor(20, 130));
        g.drawString(rand, 6, 16);
        g.dispose();
        setSession(request, rand);
        return image;
    }

    private String getRandNumber(int bits, int to)
    {
    	StringBuffer randBuffer = new StringBuffer();
        for(int i = 1; i <= bits; i++)
            randBuffer.append(RANDOM.nextInt(to));

        return randBuffer.toString();
    }

    private void setSession(HttpServletRequest request, String rand)
    {
    	request.getSession(true).setAttribute("rand",rand);
    }

    private void refreshBgColor(Graphics g)
    {
        g.fillRect(0, 0, 50, 20);
        g.setFont(new Font("Times New Roman", 0, 18));
        g.setColor(getRandColor(160, 200));
        for(int i = 0; i < 100; i++)
        {
            int x = RANDOM.nextInt(50);
            int y = RANDOM.nextInt(20);
            int xl = RANDOM.nextInt(12);
            int yl = RANDOM.nextInt(12);
            g.drawLine(x, y, x + xl, y + yl);
        }

    }

    private Color getRandColor(int fc, int bc)
    {
        if(fc > 255)
            fc = 255;
        if(bc > 255)
            bc = 255;
        int r = fc + RANDOM.nextInt(bc - fc);
        int g = fc + RANDOM.nextInt(bc - fc);
        int b = fc + RANDOM.nextInt(bc - fc);
        return new Color(r, g, b);
    }

}




servlet:
 public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Cache-Control", "no-store");
        response.setDateHeader("Expires", 0L);
        response.setHeader("Pragma", "no-cache");
        ImageIO.write((RenderedImage)DrawRandNumber.getInstance().drawRandNumber(4, 10, request), "JPEG", response.getOutputStream());
    }


调用,可点击刷新:
<img id="random"  src="/servletx"  onclick="this.src='/servletx'"  />

2008年7月12日 15:19
0 0

你要去求证,每次刷新页面,是否真的触发了你的随机的代码.

还是应用设定的Session时效,认为你在恶意刷新,而没有响应你的请求 ?

2008年7月10日 18:39

相关推荐

    验证码算法

    完成用户登录,注册时有验证码填写,附带验证码算法

    c# 验证码模块 算法参考

    c# 验证码模块 算法参考 改进后可以使用

    一个纯java的验证码识别算法

    本文将探讨一个基于Java实现的验证码识别算法,通过提供的标签“源码”和“工具”,我们可以推测这是一个开源项目,旨在帮助开发者理解验证码识别的原理并应用于实际项目。 验证码识别通常涉及图像处理、模式识别和...

    数字验证码识别算法的研究和设计

    为了解决这类验证码的自动识别问题,作者们设计了一个基于模板匹配算法的识别系统,该系统能够有效识别形变数字验证码,并通过多种优化手段显著提高了识别的准确性。 #### 二、系统设计原理 ##### 2.1 模板匹配...

    数字验证码识别算法介绍

    数字验证码识别算法则是其中的一种常见类型,其核心目标是通过计算机算法自动识别图像中的数字,以确保只有人类用户能够成功交互。 在数字验证码识别算法中,主要涉及以下几个关键技术点: 1. 图像预处理:这是...

    验证码识别算法非常好的数字识别程序

    验证码识别算法是计算机视觉领域中的一个重要分支,主要目的是通过算法自动解析图像中的文字或数字,以验证用户身份或防止机器自动操作。在这个“验证码识别算法非常好的数字识别程序”中,我们可能涉及到的关键技术...

    C#验证码识别参考算法

    C#验证码识别参考算法

    验证码破解算法研究及实现_杨思发

    本人在知网上下的验证码识别论文,希望有对这方面感兴趣的可以下来看看。一共6份,这是其中一份

    关于验证码识别的文献

    关于验证码识别的研究与挑战 验证码(CAPTCHA,Completely Automated Public Turing Test to Tell Computers and Humans Apart)作为一种广泛采用的安全技术,旨在区分人类用户与自动化的软件程序。在IT领域,尤其...

    水滴算法分割验证码

    在MATLAB环境中,我们可以利用水滴算法有效地解决验证码字符分割的问题,尤其是那些容易出现左右重叠或死循环的挑战。 水滴算法的基本思想是模拟水滴下落过程,通过“水滴”在图像上流动来分离字符。这种算法主要...

    基于惯性大水滴滴水算法和支持向量机的粘连字符验证码识别

    在这个特定的项目中,研究人员采用了基于惯性大水滴滴水算法和支持向量机(SVM)的方法来识别粘连字符的验证码。这是一种创新的图像处理和机器学习技术的结合,用于提升验证码识别的准确性和效率。 首先,我们来探讨...

    验证码自动识别Delphi版

    在Delphi中实现验证码识别,需要理解图像处理、模式识别以及可能涉及的机器学习算法。 dama2api是一个专门用于图像识别的API,它可以处理各种复杂的图像任务,包括验证码识别。这个API可能包含了特征提取、图像...

    python : knn算法——批量识别验证码.rar

    Python中的KNN(K-...总的来说,通过Python的KNN算法进行验证码识别,我们可以学习到图像预处理、特征提取、模型训练和评估等多个环节,这不仅有助于理解机器学习的基本流程,也为解决实际问题提供了有价值的工具。

    python验证码识别教程之利用滴水算法分割图片

    通过滴水算法分割图片,能够处理复杂的粘连字符问题,提高验证码识别的准确度。通过上述Python实现的示例,读者可以更加深入地理解和掌握滴水算法的原理和应用。需要注意的是,算法实现过程中可能存在的错误识别问题...

    KaiXin网验证码识别算法

    在本文中,我们将探讨的是针对KaiXin网验证码的特定识别算法,这是一个涉及图像处理和模式识别的技术。 KaiXin网验证码识别算法的核心在于将复杂的图像转换成可读的字符序列。这个过程大致可以分为六个步骤: 1. ...

Global site tag (gtag.js) - Google Analytics