servlet随机生成验证码
来源:互联网 发布:数据分析控制程序 编辑:程序博客网 时间:2024/05/22 02:12
javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
import com.sun.image.codec.jpeg.*;
public class ValidImage extends HttpServlet
...{
private static final String CONTENT_TYPE = "image/jpeg; charset=GB2312";
//Initialize global variables
public void init() throws ServletException
...{
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
...{
response.setContentType(CONTENT_TYPE);
//设置页面不缓存
HttpSession session=request.getSession();
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();
// 设定背景色
g.setColor(getRandColor(155,254));
//g.setColor(new Color(255,255,255));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,220));
//生成随机类
Random random = new Random();
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.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("randcode",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
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);
}
//Clean up resources
public void destroy()
...{
}
}
//这里产生了一个 randcode 的session, 用户在第二页 验证此验证码
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
import com.sun.image.codec.jpeg.*;
public class ValidImage extends HttpServlet
...{
private static final String CONTENT_TYPE = "image/jpeg; charset=GB2312";
//Initialize global variables
public void init() throws ServletException
...{
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
...{
response.setContentType(CONTENT_TYPE);
//设置页面不缓存
HttpSession session=request.getSession();
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();
// 设定背景色
g.setColor(getRandColor(155,254));
//g.setColor(new Color(255,255,255));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,220));
//生成随机类
Random random = new Random();
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.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("randcode",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
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);
}
//Clean up resources
public void destroy()
...{
}
}
//这里产生了一个 randcode 的session, 用户在第二页 验证此验证码
- servlet随机生成验证码
- servlet随机生成验证码
- Servlet生成随机验证码
- Servlet生成随机验证码
- 用servlet生成随机验证码
- java Servlet 生成随机验证码
- Servlet生成随机验证码图片
- servlet生成随机图片验证码
- Servlet随机生成验证图片
- servlet 随机验证码
- 【Java】使用Servlet生成随机验证码图片
- Java Web:使用Servlet生成网页随机图片验证码
- 5.Servlet生成多位随机的验证码
- 【Servlet】生成指定长度随机验证码简化版
- java(15)--Servlet生成随机验证图片
- 生成随机验证码
- 随机生成验证码
- 生成随机验证码
- 何苦做游戏 — 一位网游制作人的成长故事
- C#数据库事务原理及实践
- 我不知道她的想法。
- [转贴+更新]关于Directshow SDK 和Windows SDK
- 用命令方式打开AD配置的方法。
- servlet随机生成验证码
- JAVA 如何创建/删除/修改/复制目录及文件
- 数据库设计经验谈
- 2006年中文博客封神榜:中文108 Blogger
- SCJP5.0第一章小结
- Objective-C 学习Follow Me(一)
- 关于我的出国想法
- 考研,我们需要这种折磨!
- 2007年,毕业生的底薪跌至500元