JSP生成验证码

Posted on 2007-04-18 19:54 久城 阅读(1048) 评论(3)  编辑  收藏 所属分类: Jsp学习
<%@ page contentType="image/jpeg"
    
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
    pageEncoding
="gb2312"%>
<%!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);
    }
%>
<%
    
//设置页面缓存   
    response.setHeader("Pragma""No-cache");
    response.setHeader(
"Cache-Control""no-cache");
    response.setDateHeader(
"Expires"0);
    
// 在内存中创建图象   
    int width = 60, height = 20;
    BufferedImage image 
= new BufferedImage(width, height,
            BufferedImage.TYPE_INT_RGB);
    
// 获取图形上下文   
    Graphics g = image.getGraphics();
    
//生成随机类   
    Random random = new Random();
    
// 设定背景色   
    g.setColor(getRandColor(200250));
    g.fillRect(
00, width, height);
    
//设定字体   
    g.setFont(new Font("Times New Roman", Font.PLAIN, 18));  
    
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到   
    g.setColor(getRandColor(160200));
    
for (int i = 0; i < 155; i++{
        
int x = random.nextInt(width);
        
int y = random.nextInt(height);
        
int xl = random.nextInt(12);
        
int yl = random.nextInt(12);
        g.drawLine(x, y, x 
+ xl, y + yl);
    }

    
// 取随机产生的认证码(4位数字)   
    String sRand = "";
    
for (int i = 0; i < 4; i++{
        String rand 
= String.valueOf(random.nextInt(10));
        sRand 
+= rand;
        
// 将认证码显示到图象中   
        g.setCor(new Color(20 + random.nextInt(110), 20 + random
        .nextInt(
110), 20 + random.nextInt(110)));
        
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成   
        g.drawString(rand, 13 * i + 616);
    }

    
// 将认证码存入SESSION   
    session.setAttribute("rand", sRand);
    
// 图象生效   
    g.dispose();
    
// 输出图象到页面   
    ImageIO.write(image, "JPEG", response.getOutputStream());
%>


欢迎来访!^.^!
本BLOG仅用于个人学习交流!
目的在于记录个人成长.
所有文字均属于个人理解.
如有错误,望多多指教!不胜感激!

Feedback

# re: JSP生成验证码  回复  更多评论   

2007-04-18 20:34 by 静儿
其实我经常登陆你的blog,一直觉得你是个奇人。现在最令我奇怪的一件事发生了:你怎么知道我的blog的?呵呵,以后我得多向你学习,你可别嫌麻烦哦!

# re: JSP生成验证码[未登录]  回复  更多评论   

2007-06-11 22:33 by ^_^
最好写一下调用并判断验证码的过程

# re: JSP生成验证码  回复  更多评论   

2007-08-15 15:07 by ddd
LS, 调用和判断很简单呀!

既然程序里已经生成了验证码,

用它直接跟User输入的比较就好。。。

至于验证码如何保存,Session,Request啥的,就是喜好问题了

只有注册用户登录后才能发表评论。


网站导航:
 

Copyright © 久城