`
jwen
  • 浏览: 63194 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

验证码机制实现

    博客分类:
  • java
阅读更多
我们经常在登陆一些网站的时候,要求输入显示的验证码,而且验证码是以图片形式提供,这是怎么实现的?HOHO,我也来实现一个。有兴趣的看看,也算做自己的笔记。

        你可能也猜想过验证码的图片不至于是预先做好了放在某个文件夹里的吧?NO,NO,试想,真的如此做的话,如果是4位验证码,并且字母数字混杂的话,这样的工作量美工肯定不接受:)所以,唯一的解释就是这些图片都是程序生成的。也就是程序“画”出来的!如何画?请看一段代码:

   int width=40, height=20;
   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics g = image.getGraphics();
   //以下填充背景颜色
   g.setColor(Color.decode("#66CCCF"));
   g.fillRect(0, 0, width, height);
   g.setColor(Color.decode("#01556B"));
   g.drawString(req.getParameter("yzm"),5,15);
   g.dispose();  



这段代码摘自我要举的例子。我想玩过applet和swing的朋友应该不难理解。我们把页面传过来的(req.getParameter("yzm")“画”在一个40,20大小的矩形框内。这段代码当然要放一个servlet里面,这个servlet就是来负责画图的:

import java.io.IOException;
import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.*;
import javax.servlet.ServletContext;
import java.io.OutputStream;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;

/**
* @version  1.0
* @author dennis
*/
public class Getshowimg extends HttpServlet {

public void service(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
  
   resp.setContentType("image/jpeg;charset=gb2312");
   int width=40, height=20;
   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics g = image.getGraphics();
   //以下填充背景颜色
   g.setColor(Color.decode("#66CCCF"));
   g.fillRect(0, 0, width, height);
   g.setColor(Color.decode("#01556B"));
   g.drawString(req.getParameter("yzm"),5,15);
   g.dispose();   
   OutputStream toClient = resp.getOutputStream();
   JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(toClient);
   encoder.encode(image);
            toClient.close();
  }
}



好了,图已经知道怎么画了,接下来的问题就是我们怎么在页面上显示这个图?这个图同样也是个image,当然放在一个img元素里面。另外,我们应该在页面每一次刷新时都显示不同的验证码,所以应该在body的onload的事件里调用上面的servlet。来了,首先是页面:

验证码:<input name="yzm" type="text" size="12" onKeyPress="dojudge()" id="yzm0"></td>
  <div id="yzm1" style="width:10" style="display:none"></div><IMG src='servlet/Getshowimg?yzm=0' id="img0" vspace=3>

为什么要有个ID为yzm1的隐藏层??你可能要问。试想,我们如何判断用户输入的验证码和图片的一样呢?我们要读取text里输入的验证码,我们如何读取图片显示的验证码呢??这就是隐藏层的价值所在,我们把随机生成的验证码分成两份,一份保存在隐藏层里,一份传到servlet。判断的时候,我们根本不需要知道图片显示什么,图片显示的跟隐藏层的里一样!我们只要把隐藏层里的值与text里的值判断就OK了。javascript的doinit()函数,被body的onload事件调用:

function doinit()
{
document.form1.username.focus();
var tmp=Math.random();
while (true)
{
  if (tmp>=0.1)
  {
    var num=Math.round(tmp*10000);
    document.getElementById("yzm1").innerHTML="<font color='#01556B'>"+num+"</font>";
    document.getElementById("img0").src="servlet/Getshowimg?yzm="+num;
break;
  }else
    tmp=Math.random();
}

}
在登陆按钮中加入事件,判断输入是否正确:
if (document.form1.yzm.value!=document.getElementById("yzm1").innerText)
  {
    alert("请输入有效的验证码!");
    document.form1.yzm.value="";
    document.form1.yzm.focus();
    return false;
  }
分享到:
评论
1 楼 hanfeng870223 2008-09-25  

相关推荐

    Android验证码的实现

    在Android应用开发中,验证码(CAPTCHA)是一种重要的安全机制,用于验证用户是人类而非自动程序。本篇文章将深入探讨如何在Android平台上实现验证码功能,包括自定义控件的创建和验证码的生成与验证。 首先,...

    JAVA验证码原理及实现

    验证码(CAPTCHA)是一种用于验证用户是否为人类的机制,常用于防止自动化程序(如机器人)进行恶意操作,如注册、登录或发布垃圾信息。在JAVA中,实现验证码的原理通常涉及图像处理、随机数生成以及字符编码等多个...

    验证码的实现方法-局部刷新

    验证码是Web应用中常见的一种安全机制,用于防止自动化的机器人或者恶意软件进行非法操作,比如批量注册、恶意登录等。局部刷新的验证码实现方法是一种优化用户体验的技术,它允许用户在不重新加载整个页面的情况下...

    Android开发图片验证码的实现

    在Android应用开发中,图片验证码(CAPTCHA)是一种常见的安全机制,用于防止自动化脚本或机器人进行恶意操作,如注册、登录等。本教程将详细讲解如何在Android项目中实现图片验证码的功能。 首先,理解图片验证码...

    ASP.NET动态验证码

    ASP.NET动态验证码是一种用于验证用户身份的安全机制,广泛应用于网页登录、注册和其他涉及用户交互的安全场景。它通过生成随机的图像和文字组合,要求用户在输入框中输入看到的字符,以此来防止自动化的机器人或者...

    易语言易程序也具备验证码机制

    在易语言中,开发者可以利用其提供的丰富库函数和组件来实现各种功能,包括构建验证码机制。 验证码(CAPTCHA)是一种用于验证用户是否为人类的技术,常用于防止自动化的恶意攻击,如垃圾邮件发送、恶意注册等。它...

    PHP简单验证码的实现

    在IT行业中,验证码是一种常见的安全机制,用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、垃圾信息提交等。本项目以"PHP简单验证码的实现"为主题,旨在帮助初学者理解并掌握如何在PHP中创建一个基本的...

    java实现给手机发送验证码

    这可以通过Session、Redis缓存或其他持久化机制实现。 6. **安全措施**:为了防止恶意攻击,需要限制同一手机号在短时间内多次发送验证码。可以设置IP限流策略,或者针对每个手机号设置发送次数限制。 7. **用户...

    动态滑动后端验证码实现

    动态滑动后端验证码是一种常见的安全验证机制,用于防止自动化的机器人或恶意脚本进行非法操作,如批量注册、恶意登录等。这种验证码系统通过在用户界面生成一幅含有部分遮挡图像的图片,用户需要通过拖动滑块来拼合...

    Bmob短信验证码以及倒计时重新发送验证码的实现

    验证码是一种安全机制,通过向用户的手机发送一个一次性密码(OTP,One-Time Password)来验证用户的身份。Bmob提供了这样的服务,开发者可以通过其API向指定的手机号码发送短信验证码。在实现这个功能时,开发者...

    仿支付宝滑块验证码前端实现

    滑块验证码是一种常见的防止自动化程序(如机器人)非法操作的安全机制,常用于网站登录、注册等环节,确保操作是由真实用户执行的。本实例将详细探讨如何在前端实现仿支付宝风格的滑块验证码功能。 首先,我们需要...

    android验证码的实现DEMO

    在Android开发中,验证码(Verification Code)是一种常用的安全机制,用于验证用户身份,防止恶意攻击或机器人自动操作。本DEMO主要展示了如何在Android应用中实现验证码的功能,这对于登录、注册、修改敏感信息等...

    验证码的实现 使用servlet实现

    验证码是一种用于确认用户身份的安全机制,它在网页和应用程序中广泛使用,以防止自动化脚本、机器人或恶意攻击者进行欺诈性操作。本教程将详细解释如何使用Servlet技术来实现一个简单的图形验证码。 Servlet是Java...

    Java验证码的实现

    验证码是Web应用中常见的一种安全机制,用于防止自动化的机器人或者恶意软件进行非法操作,比如批量注册、恶意登录等。本教程将详细讲解如何在Java环境下,利用MyEclipse开发工具实现一个简单的验证码功能。 首先,...

    中文及字母数字验证码实现

    验证码是一种广泛应用于网络服务中的安全机制,用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。中文及字母数字验证码的实现涉及多个技术层面,包括图像生成、字符混合、扭曲处理以及识别...

    C#验证码效果实现

    验证码是网络应用中常用的一种安全机制,用于防止自动机器人或者恶意程序进行非法操作。在C#编程语言中,我们可以利用GDI+库来创建复杂的验证码效果。本篇将详细讲解如何在C#中实现验证码的生成,包括背景噪音线、...

    Java验证码实现源码

    在Java中,我们可以使用开源库如`captcha4j`或`JCaptcha`来简化验证码的实现,这些库提供了许多预设的验证码生成策略和验证机制。 在实际项目中,为了提高安全性,验证码还应该有时间限制,过期后需要重新生成。...

    jsp实现注册页面验证码验证代码

    2. 验证码刷新机制:使用 JavaScript 实现验证码刷新机制,刷新验证码图片。 * 使用 JavaScript 实现验证码刷新机制,刷新验证码图片的同时,更新 SESSION 中的验证码。 * 使用 Date 对象获取当前时间,作为参数...

    JAVA和HTML5实现的多种验证码实现

    验证码是网络安全领域中的一种常见机制,用于防止自动化程序(如机器人)进行非法操作,比如注册、登录或提交表单。本教程重点介绍了JAVA和HTML5技术在生成验证码方面的应用,一共涉及八种不同的实现方式。 首先,...

Global site tag (gtag.js) - Google Analytics