`
wsc830719
  • 浏览: 166852 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

使用Java随机生成4位字母验证码

阅读更多

看了其他人写的验证码程序,于是自己写了个很小的,因为字母就是用ASCii码表示的,那么可以使用int值直接生成就可以了,这样程序很简单,执行效率也很高。

1 ImageOut.java  复则产生验证码

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;

public class ImageOut {

    private static final int WIDTH = 62;
    private static final int HEIGHT = 20;

    private static Color getRandomColor() {
        Random random = new Random();
        return new Color(50 + random.nextInt(100), 50 + random.nextInt(100),
                50 + random.nextInt(100));
    }

    private static int getRandomBgInt() {
        Random random = new Random();
        return 180 + random.nextInt(60);
    }

    private static Font getRandomFont() {
        Random random = new Random();
        return new Font("Times New Roman", Font.PLAIN, 10 + random.nextInt(8));
    }

    public static char getRandomChar() {
        Random random = new Random();
        if (random.nextInt(5) < 3) {
            return (char) (65 + random.nextInt(26));
        }
        return (char) (97 + random.nextInt(26));

    }

    public static Pair<String, BufferedImage> getImage() {

        BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        g.setColor(new Color(255, getRandomBgInt(), 255));
        g.fillRect(0, 0, WIDTH, HEIGHT);
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            String t = String.valueOf(getRandomChar());
            s.append(t);
            g.setColor(getRandomColor());
            g.setFont(getRandomFont());
            g.drawString(t, 3 + 16 * i, 18);
        }
        g.dispose();
        return new Pair<String, BufferedImage>(s.toString(), image);
    }
}

 2 上面使用了Pair类,使用Map也可以的,只不过Java里的类都几千行代码的,自己写个可以节约些资源:

    Pair.java

public class Pair<K, E> {
private K key;
private E value;

public Pair() {
}
public Pair(K key, E value) {
	this.key = key;
	this.value = value;
}
public K getKey() {
	return key;
}
public void setKey(K key) {
	this.key = key;
}
public E getValue() {
	return value;
}
public void setValue(E value) {
	this.value = value;
}
}

 

3 在jsp环境中使用上面的程序:

3.1 首先写个为当前用户生成验证码的jsp页面:

ValidateImage.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.awt.image.BufferedImage,javax.imageio.ImageIO" %>
<%@page import="com.bookshop.util.Pair,com.bookshop.util.ImageOut" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%
            response.setContentType("image/jpeg");
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            Pair<String, BufferedImage> p = ImageOut.getImage();
            ImageIO.write(p.getValue(), "JPEG", response.getOutputStream());
            session.setAttribute("valid", p.getKey());
%>

 

3.2 在登录注册的页面中调用:

比如login.jsp

<form id="form1" name="form1" method="post" action="<%=path%>/bookshop/login.jsp">
                    <input type="hidden" name="op" value="login" readonly="readonly" />
                    <label></label>
                    <p>
                        <label></label>
                    </p>
                    <p class="STYLE1">用户登录</p>
                    <table width="317">
                        <tr>
                            <td width="100"><span class="STYLE2">登录名称:</span></td>
                            <td width="200"><input class="field" type="text" name="username" /></td>
                        </tr>
                        <tr>
                            <td><span class="STYLE2">登陆密码:</span></td>
                            <td><input class="field" type="password" name="password" /></td>
                        </tr>
                        <tr>
                            <td rowspan="2"><span class="STYLE2">验证码:</span></td>
                            <td>
                                <input class="field" type="text" name="yanzhm" />
                            </td>
                        </tr>
                        <tr>
                            <td><img alt="看不清?单击更换!" src="<%=path%>/bookshop/ValidateImage.jsp" onclick="changeValidateCode(this)"/> </td>
                        </tr>
                        <tr>
                            <td>
                                <input class="tijiao" type="submit" name="Submit" value="登  录" />
                            </td>
                            <td style="text-align:right">
                                <input type="reset" name="Submit" value="重  置" />
                            </td>
                        </tr>
                    </table>
                </form>

上面调用了一个能刷新验证码的js代码:如下
        <script type="text/javascript">
            function changeValidateCode(obj) {
                var timenow = new Date().getTime();
                obj.src="<%=path%>/bookshop/ValidateImage.jsp?d="+timenow;
            }
        </script>

 

在验证逻辑处只需获取验证就可以了:

String yanzhm = request.getParameter("yanzhm");
                String valid = (String) session.getAttribute("valid");
                if (!yanzhm.equalsIgnoreCase(valid)) {
                    request.setAttribute("info", "验证码输入错误,请重新输入!");
                    request.getRequestDispatcher("/bookshop/error.jsp").forward(request, response);
                    return;
                }

 

4 在servlet中使用与此类似,此处省略!

分享到:
评论

相关推荐

    Java随机生成六位验证码

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

    用java编写的四位随机的验证码,包括数字跟字母

    用java编写的四位随机的验证码,包括数字跟字母 简单易懂

    java随机生成数字和字母

    ### Java随机生成数字和字母知识点解析 #### 一、引言 在Java编程语言中,随机生成数字和字母是一项常用的技术。它广泛应用于密码生成、验证码生成、游戏开发等场景。本文将通过一个简单的示例程序来介绍如何使用...

    java随机产生四位验证码(相邻码不重复)两种算法实现

    在这个问题中,我们关注的是如何生成四位字符且无重复的验证码,以及如何进一步确保相邻字符不重复的实现方法。 1. 生成四位字符、整数组成的验证码(无重复码验证) 首先,我们需要一个包含所有可能字符的数组,...

    java生成的随机验证码

    例如,如果我们想要生成4位数字的验证码,可以创建一个`Random`对象,并调用`nextInt(10)`方法四次,每次都在0到9之间获取一个随机整数。为了确保验证码不重复,可以将生成的数字存储在一个数组中,并检查新生成的...

    java随机生成验证码

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

    java随机生成数字 验证码

    根据给定的文件信息,我们将深入探讨如何使用Java语言生成随机数字及验证码,尤其是在网络验证、安全性增强等场景中的应用。下面将详细解析文件中提到的关键知识点,包括使用`java.security.SecureRandom`类和`java....

    java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发

    java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发

    随机生成10位数包含字母和数字

    本篇文章将详细解析如何通过Java语言实现一个功能,即随机生成包含字母和数字的10位随机字符串。 #### 核心需求分析 根据题目描述,我们需要实现的功能是生成一个由字母和数字组成的10位随机字符串。这里的字母只...

    java随机生成图片验证码

    Java 随机生成图片验证码是一种常见的网络安全技术,主要用于防止自动化程序(如机器人)进行恶意操作,例如批量注册、刷票等。在这个过程中,我们通常会创建一个包含随机字符的字符串,然后将其显示为带有扭曲、...

    随机生成验证码,支持大小写字母、数字

    java随机产生验证码,可以随机生成数字、大写字母、小写字母。还可以随机生成文字字体、及大小。在图片上面可能字体都不不同、大小不等。

    随机生成验证码java源码

    随机生成手机验证码的java源码文件,结果是在后台输出,可根据选择生成几位随机码或者随机码是否带有字母。

    随机生成11位数字

    ### 随机生成11位数字 #### 1. 理解需求 在给定的代码片段中,我们看到一个名为`getRandomString`的方法,其目的是生成一个长度为11的随机字符串。这个字符串包含数字和字母,但根据题目描述,我们需要的是一个纯...

    随机生成验证码工具jar包

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

    随机生成用户密码、验证码.rar

    本教程将详细介绍如何使用Java编程语言来实现随机生成用户密码和验证码的功能。 首先,我们来讨论随机生成用户密码的方法。一个良好的用户密码生成策略应该考虑到以下几个因素: 1. **复杂度**:密码应包含大小写...

    随即生成指定位数的验证码.可输出到页面

    随即生成指定位数的验证码.可输出到页面

    java生成验图片验证码

    1. **随机数生成**:验证码通常由一组随机生成的字符组成,可以是数字、字母或者是两者的混合。Java中的`Random`类可以用于生成随机数,然后结合字符集(如ASCII或Unicode)来得到随机字符。 2. **图像处理**:Java...

    java随机生成验证码图片和校验

    验证码通常包含一组随机生成的字符,这些字符可以是中文、字母、数字或它们的组合。在Java中,可以使用`java.util.Random`类来生成随机数,然后通过字符集映射将这些数字转化为对应的字符。例如,如果要生成数字...

    java生成验证码的参考资料(中英文验证码)

    1. **随机字符生成**:验证码由一组随机字符组成,可以是数字、字母,也可以包括中文字符。在Java中,可以使用`java.util.Random`类生成随机数,配合字符数组来生成随机字符。 2. **图像创建**:生成的验证码需要...

    jsp随机生成验证码

    本文将深入探讨如何使用JSP(JavaServer Pages)来生成随机验证码。 验证码的核心在于生成难以被机器识别的随机字符串或图像,同时确保服务器端能够正确验证用户输入的验证码。JSP提供了丰富的功能,可以方便地实现...

Global site tag (gtag.js) - Google Analytics