`

随机生成动态验证码

阅读更多

为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码。验证码通常是以一幅图片的形式显示的,用户按照图片中显示的数字或者字母依次输入,服务端将对用户输入和验证码进行比较,以判断用户是否经过检验。由于验证码都是随机生成的,自动发布信息的软件无法知道生成的验证码。

 

  1生成图片的程序:
  2/**//*
  3 * RandomCodeServlet.java
  4 *
  5 * Created on 2007-5-29, 0:51:02
  6 *
  7 * To change this template, choose Tools | Template Manager
  8 * and open the template in the editor.
  9 */

 10
 11package com.javahe.image;
 12
 13/** *//**
 14 *
 15 * @author java-he
 16 */

 17import java.awt.Color;
 18import java.awt.Font;
 19import java.awt.Graphics2D;
 20import java.awt.image.BufferedImage;
 21import java.util.Random;
 22import javax.imageio.ImageIO;
 23
 24import javax.servlet.*;
 25import java.io.*;
 26import javax.servlet.http.*;
 27
 28public class RandomCodeServlet extends HttpServlet {
 29    //验证码图片的宽度。
 30    private int width=60;
 31    //验证码图片的高度。
 32    private int height=20;
 33    
 34    protected void service(HttpServletRequest req, HttpServletResponse resp)
 35            throws ServletException, java.io.IOException {
 36        BufferedImage buffImg=new BufferedImage(width,height,
 37                BufferedImage.TYPE_INT_RGB);
 38        Graphics2D g=buffImg.createGraphics();
 39        
 40        //创建一个随机数生成器类。
 41        Random random=new Random();
 42        
 43        g.setColor(Color.WHITE);
 44        g.fillRect(0,0,width,height);
 45        
 46        //创建字体,字体的大小应该根据图片的高度来定。
 47        Font font=new Font("Times New Roman",Font.PLAIN,18);
 48        //设置字体。
 49        g.setFont(font);
 50        
 51        //画边框。
 52        g.setColor(Color.BLACK);
 53        g.drawRect(0,0,width-1,height-1);
 54        
 55        //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
 56        g.setColor(Color.GRAY);
 57        for (int i=0;i<160;i++{
 58            int x = random.nextInt(width);
 59            int y = random.nextInt(height);
 60            int xl = random.nextInt(12);
 61            int yl = random.nextInt(12);
 62            g.drawLine(x,y,x+xl,y+yl);
 63        }

 64        
 65        
 66        //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
 67        StringBuffer randomCode=new StringBuffer();
 68        int red=0,green=0,blue=0;
 69        
 70        //随机产生4位数字的验证码。
 71        for (int i=0;i<4;i++{
 72            //得到随机产生的验证码数字。
 73            String strRand=String.valueOf(random.nextInt(10));
 74            
 75            //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
 76            red=random.nextInt(110);
 77            green=random.nextInt(50);
 78            blue=random.nextInt(50);
 79            
 80            //用随机产生的颜色将验证码绘制到图像中。
 81            g.setColor(new Color(red,green,blue));
 82            g.drawString(strRand,13*i+6,16);
 83            
 84            //将产生的四个随机数组合在一起。
 85            randomCode.append(strRand);
 86        }

 87        //将四位数字的验证码保存到Session中。
 88        HttpSession session=req.getSession();
 89        session.setAttribute("randomCode",randomCode.toString());
 90        
 91        //禁止图像缓存。
 92        resp.setHeader("Pragma","no-cache");
 93        resp.setHeader("Cache-Control","no-cache");
 94        resp.setDateHeader("Expires"0);
 95        
 96        resp.setContentType("image/jpeg");
 97        
 98        //将图像输出到Servlet输出流中。
 99        ServletOutputStream sos=resp.getOutputStream();
100        ImageIO.write(buffImg, "jpeg",sos);
101        sos.close();
102    }

103}

104
105


 1写好后在web.xml中添加对应的servlet。然后页面调用的时候用。
 2<%@page contentType="text/html"%>
 3<%@page pageEncoding="UTF-8"%>
 4<%--
 5The taglib directive below imports the JSTL library. If you uncomment it,
 6you must also add the JSTL library to the project. The Add Library action
 7on Libraries node in Projects view can be used to add the JSTL 1.1 library.
 8--
%>
 9<%--
10<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%> 
11--%>
12<%
13if(request.getParameter("random")!=null)
14{
15    if(request.getParameter("random").equals(session.getAttribute("randomCode")))
16    {
17        out.println("ok!");
18    }
19}
20
%>
21<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
22"http://www.w3.org/TR/html4/loose.dtd">
23
24<html>
25    <head><title>登录页面</title>
26    <body>
27        <form method="POST" action="index.jsp">
28            <table>
29                <tr>
30                    <td>用户名:</td>
31                    <td><input type="text" name="username"></td>
32                </tr>
33                <tr>
34                    <td>密码:</td>
35                    <td><input type="password" name="password"></td>
36                </tr>
37                <tr>
38                    <td>验证码:</td>
39                    <td>
40                        <input type="text" name="random" maxlength="4">
41                    <img src="imgcode">
42                    </td>
43                </tr>
44                <tr>
45                    <td><input type="reset" value="重填"></td>
46                    <td><input type="submit" value="提交"></td>
47                </tr>
48            </table>
49        </form>
50    </body>
51</html>
52

 

最近用netbeans 总容易发生一个运行错误,指向

<nbdeploy debugmode="false" clientUrlPart="${client.urlPart}" forceRedeploy="${forceRedeploy}"/>

。感觉是绑定tomcat失败。今天晚上调式这个程序的时候又遇到这个问题。发现重启电脑后,就正常了。也许是先前运行了其他tomcat下的程序吧。

 

sun的网站看看

http://forum.java.sun.com/thread.jspa?threadID=610420&messageID=4240787

发现不少人遇到同样问题,但是具体似乎没有说出个所以然,我也不想深究,必定问题自己能解决就行。呵呵。看来netbeans M9还是不够好哦。期待beta版本。

 

感觉M9 运行,或者编译都显得很慢。呵呵,也许是我电脑内存只有 <chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="512" unitname="m">512M</chmetcnv>的原因吧。

分享到:
评论

相关推荐

    Java随机生成动态验证码程序

    为了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码。验证码通常是以一幅图片的形式显示的...由于验证码都是随机生成的,自动发布信息的软件无法知道生成的验证码。

    随机生成验证码.html

    HTML实现,有随机生成的验证码+按钮+输入框

    Android实现随机生成图片验证码的示例程序,直接构建运行,代码文件简单易参考

    Android实现随机生成图片验证码的示例程序,直接构建运行,代码文件简单易参考 Android实现随机生成图片验证码的示例程序,直接构建运行,代码文件简单易参考 Android实现随机生成图片验证码的示例程序,直接构建...

    C#生成动态验证码

    首先,我们需要创建一个类或方法来生成验证码。这通常包括以下步骤: 1. **定义验证码长度**:根据需求设置验证码的字符数量,通常4到6位较为常见。 2. **选择字符集**:创建一个包含所有可能字符的字符串,如数字0...

    动态生成随机验证码

    用JSP动态生成随机验证码,已经调试通过的demo,很好用的例子,绝对好用!

    php动态随机生成验证码类

    这个PHP动态随机生成验证码类旨在创建具有以下特点的验证码: 1. **动态生成**:验证码图片是每次请求时实时生成的,确保每次展示的验证码都是独一无二的,增加了破解的难度。 2. **纯白色填充**:背景通常采用纯...

    Java随机生成六位验证码

    随机验证码。 - 随机生成十组六位字符组成的验证码。 - 验证码由大小写字母、数字字符组成。

    随机生成验证码工具jar包

    这个“随机生成验证码工具jar包”是一个Java编写的程序库,它能够帮助开发者快速地在他们的应用中集成验证码功能。让我们深入了解一下这个jar包以及与之相关的Java和jar文件的知识。 首先,Java是一个广泛使用的...

    QT实现随机生成验证码

    在QT中实现随机生成验证码是一项常见的任务,通常用于用户登录验证、防止机器人操作等安全场景。验证码的目的是通过要求用户输入随机生成的一串字符或图像中的数字,来确保请求是由人类而非机器发起的。 验证码的...

    Python实现随机生成验证码

    本话题主要关注如何使用Python编程语言,结合PIL(Python Imaging Library)模块来实现随机生成验证码图片。PIL是Python中的图像处理库,能够创建、修改和显示图像,非常适合用于生成动态验证码。 首先,我们要导入...

    jsp随机生成验证码

    // 生成验证码逻辑 String captchaCode = generateCaptchaCode(); session.setAttribute("captcha", captchaCode); // 将验证码绘制为图像并输出 byte[] imageBytes = drawCaptchaImage(captchaCode); ...

    用Python生成随机验证码

    该资源为小编原创的使用Python生成随机验证码的源文件,可供学习制作python验证码的小伙伴们下载

    java生成的随机验证码

    在Java中,生成随机验证码涉及到多个知识点,包括字符串处理、随机数生成、图像处理以及字体操作等。下面将详细介绍这些内容。 首先,我们要生成随机数字或字母。在Java中,可以使用`java.util.Random`类来生成...

    验证码的生成,如何随机生成验证码

    验证码通常由一组随机生成的字符组成,可以是数字、字母或它们的组合。用户在看到验证码后需要输入相同的字符序列以证明他们是人类,而不是计算机程序。这样可以防止恶意脚本自动执行任务,增加了网站的安全性。 2...

    java 生成动态gif 验证码

    这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能继续操作。下面将详细讲解如何在Java中实现这个功能。 1. **基础概念** - **验证码**:验证码(CAPTCHA)是...

    java生成随机验证码

    java生成随机验证码, 这是一个demo, eclipse项目,导入eclipse即可

    随机生成验证码源码(java)

    随机生成验证码源码(java)

    Servlet生成动态验证码

    要生成动态验证码,首先需要在Servlet中创建一个`BufferedImage`对象,定义验证码的宽度和高度。然后,通过随机数生成器填充图像,可以绘制不同颜色的线条和字符,增加识别难度。使用`Random`类生成随机字符序列,...

    Android中两种方式随机生成验证码源代码

    在Android开发中,验证码是一种常见的安全机制,用于防止恶意机器人或自动程序进行非法操作。...在提供的`Android中两种方式随机生成验证码Demo`压缩包中,你可以找到对应的源代码实现,进一步学习和实践。

    java随机生成验证码

    在画布上绘制随机生成的字符串,每个字符的位置和颜色都是随机的,这样可以增加识别难度。使用`Font`类创建不同样式和大小的字体,然后用`Graphics2D`的`drawString()`方法绘制。 6. **保存为图像**: 使用`...

Global site tag (gtag.js) - Google Analytics