`
lw223
  • 浏览: 97834 次
  • 性别: 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);
        }

    }

}
分享到:
评论

相关推荐

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

    易语言随机生成验证码源码.zip易语言项目例子源码下载易语言随机生成验证码源码.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队开发项目参考

    动态生成随机验证码

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

    随机生成验证码

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

    ASP.net数字验证码生成及判断例子.rar

    ASP.net数字验证码生成,并且判断验证码输入是否正确的例子,ASP.NET生成基于数字和随机数的验证码例子,学习下如何在ASP.NET中调用和生成数字图形的验证码。如示例所示,在一个登录页上使用本代码生成的数字验证码...

    JAVA生成随机验证码(最常见的带条纹字母数字)

    在我们项目中间经常会用到验证码...这是一个生成验证码的例子,直接可以用在项目中...生成带条纹的含有字母和数字的随机验证码!

    验证码 方案 生成 图 片 例子

    本方案例子为验证证码方案: 采用从网上下载的抗AI识别的图片,随机选择图片的方案。 应用例子PHP代码: 1. 代码包括以下内容: log_aux.php 共用例子代码。...淘宝上搜索 "验证码生成" 可以找到验证证码图片

    在JSP页面中产生随机验证码

    在JSP页面中产生随机验证码的小例子 在JSP页面中产生随机验证码的小例子

    c#验证码例子

    c#编写随机生成验证码并进行验证,一个简单的例子。

    php 生成随机验证码图片代码

    一个最简单的生成随机验证码图片的例子

    Android生成随机的图形验证码

    该例子里面包含了自定义view和工具类两种方式,有随机数,干扰线,随机文本字体颜色,随机背景颜色

    4位图形验证码.html

    需要添加正确路径的jquery,内容为随机生成4位验证码,包含字母大小写,数字,颜色等信息,一个简单的demo,仅供参考。

    验证码识别程序

    里面包含验证码生成程序和识别程序,是入门CNN的简单实用的例子,有介绍见https://blog.csdn.net/qq_32791307/article/details/82262051

    Android例子源码添加噪点和干扰线的验证码.zip

    本项目是一个安卓获取随机验证码的小例子,可以随机生成4位数字的验证码并且绘制有燥点和干扰线,绘制出的数字很小,如果视力不好估计看不见。不过如果想OCR识别肯定是很难的,有用到的朋友自己下载研究吧编码GBK...

    asp.net做的验证码

    一个利用验证码登陆校验的小例子,验证码都是随机生成,源码中配有详细说明注释,参数可以自行设置,登陆账号密码可以随便填写。ValidateCode.aspx为验证码生成文件

    添加噪点和干扰线的验证码.zip

    本项目是一个安卓获取随机验证码的小例子,可以随机生成4位数字的验证码并且绘制有燥点和干扰线,绘制出的数字很小,如果视力不好估计看不见。不过如果想OCR识别肯定是很难的,有用到的朋友自己下载研究吧。

    asp最简单的生成验证码代码

    是随机生成的,因为比较简单所以对付不了那些强大的发帖软件,不过总比没有的好,放上验证码之后观测了几天多是没有见到发垃圾帖了,应该有效吧,哈哈。 例子: ======show.asp====== 代码如下: &lt;&#37; randomize...

    javaWeb中验证码的实现

    验证码的作用其实非常重要,通过它可以有效的防止有人通过使用暴力的手段破解掉用户的账号密码信息,验证码是一串随机生成的数字组合,而最重要的就是它具有扰乱人眼的背景图片。在互联网盛行的今天,信息安全更显得...

    经典的PHP验证码类.zip

    介绍了一个经典的PHP验证码类分享,本文不仅提供了类代码,还提供了使用例子及表单中使用的方法。 ...就可以将随机生成的验证码图片发送出去,同时会自动将这个验证码字符串保存在服务器中一份。

    php生成4位数字验证码的实现代码

    纵观网上php 生成验证码的例子,无不是php gd库与session相结合,并利用php 生成随机数的方法来完成。 PHP验证码,可以分为很多种,包括 php 图片验证码,php 随机验证码,以及php 中文验证码等,根据不同的应用场合...

Global site tag (gtag.js) - Google Analytics