使用servlet产生随机验证码
来源:互联网 发布:网络上说的cp什么意思 编辑:程序博客网 时间:2024/05/18 23:53
图片效果:
import 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, 用户在第二页 验证此验证码
- 使用servlet产生随机验证码
- 产生随机验证码
- 产生随机验证码
- 随机产生验证码
- 随机产生验证码
- 随机产生验证码
- 【Servlet】产生验证码
- servlet 随机验证码
- JSP产生随机验证码
- 产生随机的验证码
- 产生随机验证码(控制台)
- 自定义随机产生验证码
- 验证码的随机产生
- servlet中产生验证码
- servlet随机生成验证码
- servlet随机生成验证码
- Servlet实现随机验证码
- Servlet生成随机验证码
- 用C#操作word出现如下错误要如何解决
- 如何制作启动界面
- The Atom API Spec
- 内存对齐问题
- 看过如此糟的屏幕吗
- 使用servlet产生随机验证码
- 我的收藏
- 转贴:利用T——SQL得到相关表的所有信息 存储过程
- 二级域名原理以及程序代码
- MSN Messenger名称变化履历节选
- db2 TIMESTAMP和TIME 的区别
- ASP.Net学习笔记 11/5
- ASP之对象总结
- 学习.net第一天