-
关于 验证码算法的 问题5
本人的脑子不 怎么好使,写了一个关于验证码的算法,但是总是不能达到理想的效果,
验证码的算法大致采用的随机 4 个 random() 算法,来产生 4 位验证码,但是,在服务器不重启的条件下,不管怎么刷新验证页面,所得到的验证码都是一样,
我想问一下,我的思路有什么问题,是什么地方出了错误?
问题补充:
说的有道理,但是我对你回答的
“...应用设定的Session时效.认为你在恶意刷新,而没有响应你的请求 ?”
中的“Session时效”,感觉好深奥,不懂,能不是解释一下,具体指的是什么东西?
是什么意思?2008年7月10日 13:10
2个答案 按时间排序 按投票排序
-
采纳的答案
生成随机数
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
-
你要去求证,每次刷新页面,是否真的触发了你的随机的代码.
还是应用设定的Session时效,认为你在恶意刷新,而没有响应你的请求 ?2008年7月10日 18:39
相关推荐
完成用户登录,注册时有验证码填写,附带验证码算法
c# 验证码模块 算法参考 改进后可以使用
本文将探讨一个基于Java实现的验证码识别算法,通过提供的标签“源码”和“工具”,我们可以推测这是一个开源项目,旨在帮助开发者理解验证码识别的原理并应用于实际项目。 验证码识别通常涉及图像处理、模式识别和...
为了解决这类验证码的自动识别问题,作者们设计了一个基于模板匹配算法的识别系统,该系统能够有效识别形变数字验证码,并通过多种优化手段显著提高了识别的准确性。 #### 二、系统设计原理 ##### 2.1 模板匹配...
数字验证码识别算法则是其中的一种常见类型,其核心目标是通过计算机算法自动识别图像中的数字,以确保只有人类用户能够成功交互。 在数字验证码识别算法中,主要涉及以下几个关键技术点: 1. 图像预处理:这是...
验证码识别算法是计算机视觉领域中的一个重要分支,主要目的是通过算法自动解析图像中的文字或数字,以验证用户身份或防止机器自动操作。在这个“验证码识别算法非常好的数字识别程序”中,我们可能涉及到的关键技术...
C#验证码识别参考算法
本人在知网上下的验证码识别论文,希望有对这方面感兴趣的可以下来看看。一共6份,这是其中一份
关于验证码识别的研究与挑战 验证码(CAPTCHA,Completely Automated Public Turing Test to Tell Computers and Humans Apart)作为一种广泛采用的安全技术,旨在区分人类用户与自动化的软件程序。在IT领域,尤其...
在MATLAB环境中,我们可以利用水滴算法有效地解决验证码字符分割的问题,尤其是那些容易出现左右重叠或死循环的挑战。 水滴算法的基本思想是模拟水滴下落过程,通过“水滴”在图像上流动来分离字符。这种算法主要...
在这个特定的项目中,研究人员采用了基于惯性大水滴滴水算法和支持向量机(SVM)的方法来识别粘连字符的验证码。这是一种创新的图像处理和机器学习技术的结合,用于提升验证码识别的准确性和效率。 首先,我们来探讨...
在Delphi中实现验证码识别,需要理解图像处理、模式识别以及可能涉及的机器学习算法。 dama2api是一个专门用于图像识别的API,它可以处理各种复杂的图像任务,包括验证码识别。这个API可能包含了特征提取、图像...
Python中的KNN(K-...总的来说,通过Python的KNN算法进行验证码识别,我们可以学习到图像预处理、特征提取、模型训练和评估等多个环节,这不仅有助于理解机器学习的基本流程,也为解决实际问题提供了有价值的工具。
通过滴水算法分割图片,能够处理复杂的粘连字符问题,提高验证码识别的准确度。通过上述Python实现的示例,读者可以更加深入地理解和掌握滴水算法的原理和应用。需要注意的是,算法实现过程中可能存在的错误识别问题...
在本文中,我们将探讨的是针对KaiXin网验证码的特定识别算法,这是一个涉及图像处理和模式识别的技术。 KaiXin网验证码识别算法的核心在于将复杂的图像转换成可读的字符序列。这个过程大致可以分为六个步骤: 1. ...