`
lw223
  • 浏览: 100068 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

随机生成验证码的例子

    博客分类:
  • java
阅读更多
最近在读“struts2权威指南”这本书,里面例子中有段随机生成验证码的代码,转帖过来,以后没准能用到。
虽然现在现成的东西很多,不过还是要多学学代码,看看作者怎写的 :-)
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthImg extends HttpServlet ...{

    
// 设置图形验证码中字符串的字体和大小
    private Font mFont = new Font("Arial Black", Font.PLAIN, 16);

    
public void init() throws ServletException ...{
        
super.init();
    }


    
// 生成随即颜色
    Color getRandColor(int fc, int bc) ...{
        Random random 
= new Random();
        
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);
    }


    
// 生成服务器响应的service方法
    public void service(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException ...{
        
// 组织生成页面内容被缓存,保证每次重新生成随机验证码
        response.setHeader("Pragma""No-cache");
        response.setHeader(
"Cache-Control""no-cache");
        response.setDateHeader(
"Expires"0);
        
// 指定 图形验证码大小
        int width = 100, height = 8;
        
// 生成一张新图片
        BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        
// 在图片中绘制内容
        Graphics g = image.getGraphics();
        Random random 
= new Random();
        g.setColor(getRandColor(
200250));
        g.fillRect(
11, width - 1, height - 1);
        g.setColor(
new Color(102102102));
        g.setFont(mFont);
        
// 随即生成线条,让图片看起来更加杂乱
        g.setColor(getRandColor(160200));
        
for (int i = 0; i < 155; i++...{
            
int x1 = random.nextInt(width - 1);
            
int y1 = random.nextInt(height - 1);
            
int x2 = random.nextInt(6+ 1;
            
int y2 = random.nextInt(12+ 1;
            g.drawLine(x1, y1, x2, y2);
        }

        
// 随机生成线条,让图片看起来更杂乱
        for (int i = 0; i < 70; i++...{
            
int x1 = random.nextInt(width - 1);
            
int y1 = random.nextInt(height - 1);
            
int x2 = random.nextInt(6+ 1;
            
int y2 = random.nextInt(12+ 1;
            g.drawLine(x1, y1, x2, y2);
        }

        
// 读取变量,用于保存系统生成的随机字符串
        String sRand = "";
        
for (int i = 0; i < 6; i++...{
            
// 取得一个随机生成的字符
            String tmp = getRandomChar();
            sRand 
+= tmp;
            
// 将系统随机生成的字符添加到图形验证码图片上
            g.setColor(new Color(20 + random.nextInt(110), 20 + random
                    .nextInt(
110), 20 + random.nextInt(110)));
            g.drawString(tmp, 
15 * i + 1015);
        }

        
// 取得用户Session
        HttpSession session = request.getSession(true);
        
// 将系统随机生成的图形验证码添加到用户Session中
        session.setAttribute("rand", sRand);
        g.dispose();
        
// 输出图形验证码图片
        ImageIO.write(image, "JPEG", response.getOutputStream());
    }


    
private String getRandomChar() ...{
        
int rand = (int) Math.round(Math.random() * 2);
        
long itmp = 0;
        
char ctmp = '';
        
// 根据rand的值来决定是生成小写字母,大写字母和数字
        switch (rand) ...{
        
// 生成大写字母
        case 1:
            itmp 
= Math.round(Math.random() * 25 + 65);
            ctmp 
= (char) itmp;
            
return String.valueOf(ctmp);
            
// 生成小写字母
        case 2:
            itmp 
= Math.round(Math.random() * 25 + 97);
            ctmp 
= (char) itmp;
            
return String.valueOf(ctmp);
            
// 生成数字
        default:
            itmp 
= Math.round(Math.random() * 9);
            
return String.valueOf(itmp);
        }

    }

}
分享到:
评论

相关推荐

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

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

    易语言随机生成验证码源码.zip易语言项目例子源码下载

    在本压缩包“易语言随机生成验证码源码.zip”中,包含了一个易语言项目的实例源码,主要功能是随机生成验证码。这个功能在许多网络应用中都有广泛的应用,如网站注册、登录验证等,用于防止恶意机器人自动操作。 ...

    jQuery随机生成验证码插件代码

    在这个"jQuery随机生成验证码插件代码"中,我们主要关注的是如何利用jQuery实现一个功能完善的验证码生成功能。 首先,验证码的主要目的是为了验证用户的身份,防止自动机器人或恶意软件进行非法操作。它通常由一组...

    用asp.net生成随机验证码

    1. **随机性**:验证码必须是随机生成的,这样每次请求时都会得到不同的验证码,增加破解的难度。 2. **可视化**:验证码通常会以图像的形式显示,以防止被脚本直接读取。 3. **验证机制**:服务器需要存储生成的...

    PHP生成随机验证码

    为了增加干扰,还可以在图像上随机生成噪点。 ```php $image = imagecreatetruecolor(100, 30); $background_color = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 0, 0, 100, 30, $...

    web页面实现随机生成验证码的小列子

    1. **生成随机字符串**:验证码通常是4到6位的随机字母和数字组合。可以使用Java的`Random`类结合字符数组生成这个字符串。确保包含大小写字母和数字,以增加复杂性。 ```java import java.util.Random; public ...

    jsp生成验证码很好的例子

    总之,"jsp生成验证码很好的例子"是关于如何利用JSP技术创建一个实用的验证码系统的学习资源,涵盖了随机字符串生成、图像处理和用户验证等多个方面,这对于任何需要防止自动化攻击的Web应用都是至关重要的。

    利用servlet动态生成验证码

    在我们的例子中,我们将主要关注doGet方法,因为生成验证码通常发生在用户请求页面时。在这个方法内,我们可以编写代码来生成随机的验证码字符串。这可以通过生成一系列随机数字和/或字母,并将它们组合成一个字符串...

    动态生成随机验证码

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

    快速生成图片验证码的例子

    它通过要求用户识别并输入一张随机生成的图片中的字符或数字来验证用户是人类而不是机器。本示例将详细介绍如何使用.NET框架下的C#语言,结合imageProcessing.dll库,快速生成图片验证码。 首先,我们要了解image...

    C#随机获取验证码

    在本示例中,我们关注的是如何在C#编程语言中实现随机生成验证码的功能。C#提供了丰富的库和功能,使得开发人员能够轻松创建这样的功能。 验证码通常包含一组随机生成的字符,这些字符可能是数字、字母或者其他特殊...

    servlet生成验证码图片

    6. **随机数生成**:`Random`类用于生成随机数,这在创建验证码时非常关键,因为我们需要随机生成验证码的字符和干扰线。 7. **字体和颜色**:`Font`类定义了字体的样式,这里使用了`"Courier New"`字体,大小为24...

    C#生成动态验证码

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

    随机生成验证码

    生成验证码的例子,随机生成图片验证码,生成的图片由大小写字母、数字、组成,图片中字符大小被不同程度的缩放,或旋转。

    网站验证码例子程序,可以直接使用

    这里提到的"验证码例子程序"很可能是一个基于图像的验证码系统,由Java编写。 Java是一种广泛使用的面向对象的编程语言,具有跨平台的特性,非常适合开发Web应用程序。在Java中实现验证码,我们可以使用如下的技术...

    易语言生成字母和数字的验证码例子源码

    在这个"易语言生成字母和数字的验证码例子源码"中,我们可以深入学习如何在易语言环境下创建一个生成随机验证码的功能。 验证码通常用于网络安全,防止自动化程序(如机器人)进行恶意操作,如注册、登录等。其核心...

    JSP生成数字验证码程序例子

    它们通常包含随机生成的一串数字或字母,用户需要正确输入才能完成特定的交互。数字验证码因其简单易读而广泛应用于各种Web应用中。 在JSP中生成数字验证码,我们需要以下几个关键步骤: 1. **随机数生成**:首先...

    Java中实现生成验证码

    在这个例子中,`VERIFY_CODES` 变量包含了用于生成验证码的所有可能字符,它只包含数字2到9以及大写字母A到Z,去除了容易混淆的1、0、i和o。 2. **创建验证码类**: `Verify` 类用于存储验证码的信息,包括一个...

    pb随机生成密码实例

    在这个"pb随机生成密码实例"中,我们探讨的是如何使用一种名为"Pb"(可能是Python的简写或者某种编程工具的缩写)来创建安全且随机的密码。对于初学者来说,理解这个过程有助于提升对密码安全性和编程基础的理解。 ...

    c#生成随机验证码的源代码(非常简单,注意)

    接下来,定义一个方法用于生成验证码,例如一个4位数字的验证码: ```csharp public static string GenerateRandomCode() { Random random = new Random(); const string chars = "0123456789"; StringBuilder sb...

Global site tag (gtag.js) - Google Analytics