两组验证码小例子
validateCode.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>两组验证码</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
  
<body>
Two Validate Code: <br>
<img src="vc_1.jsp" />
<img src="vc_2.jsp" />
</body>
</html>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>两组验证码</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
Two Validate Code: <br>
<img src="vc_1.jsp" />
<img src="vc_2.jsp" />
</body>
</html>
vc_1.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.ysx.system.actions.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>验证码测试</title>
</head>
<body>
<form name="f1" method="post" action="login.jsp">
<div>
<%
Yzm a = new Yzm();
a.service(request, response);
out.clear();
out = pageContext.pushBody();
%>
</div>
</form>
</body>
</html>
<%@ page import="com.ysx.system.actions.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>验证码测试</title>
</head>
<body>
<form name="f1" method="post" action="login.jsp">
<div>
<%
Yzm a = new Yzm();
a.service(request, response);
out.clear();
out = pageContext.pushBody();
%>
</div>
</form>
</body>
</html>
vc_2.jsp:
<%@ page
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>
<%@ page import="java.io.OutputStream"%>
<%!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);
}%>
<%
try {
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);
OutputStream os = response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.setColor(getRandColor(160, 200));
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);
}
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.setAttribute("rand", sRand);
g.dispose();
ImageIO.write(image, "JPEG", os);
os.flush();
os.close();
os = null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
} catch (IllegalStateException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
%>
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>
<%@ page import="java.io.OutputStream"%>
<%!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);
}%>
<%
try {
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);
OutputStream os = response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.setColor(getRandColor(160, 200));
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);
}
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.setAttribute("rand", sRand);
g.dispose();
ImageIO.write(image, "JPEG", os);
os.flush();
os.close();
os = null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
} catch (IllegalStateException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
%>
Yzm.java:
 import java.awt.Color;
import java.awt.Color; import java.awt.Font;
import java.awt.Font; import java.awt.Graphics2D;
import java.awt.Graphics2D; import java.awt.image.BufferedImage;
import java.awt.image.BufferedImage; import java.util.Random;
import java.util.Random; import javax.imageio.ImageIO;
import javax.imageio.ImageIO;
 import javax.servlet.*;
import javax.servlet.*; import javax.servlet.http.*;
import javax.servlet.http.*;
 public class Yzm extends HttpServlet {
public class Yzm extends HttpServlet { 
     public static final long serialVersionUID = 1L;
    public static final long serialVersionUID = 1L; 
     // 验证码图片的宽度。
    // 验证码图片的宽度。 private int width = 60;
    private int width = 60; // 验证码图片的高度。
    // 验证码图片的高度。 private int height = 20;
    private int height = 20;
 protected void service(HttpServletRequest req, HttpServletResponse resp)
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException {
            throws ServletException, java.io.IOException { BufferedImage buffImg = new BufferedImage(width, height,
        BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics();
        Graphics2D g = buffImg.createGraphics();
 // 创建一个随机数生成器类。
        // 创建一个随机数生成器类。 Random random = new Random();
        Random random = new Random(); g.setColor(Color.WHITE);
        g.setColor(Color.WHITE); g.fillRect(0, 0, width, height);
        g.fillRect(0, 0, width, height);
 // 创建字体,字体的大小应该根据图片的高度来定。
        // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Times New Roman", Font.PLAIN, 18);
        Font font = new Font("Times New Roman", Font.PLAIN, 18); // 设置字体。
        // 设置字体。 g.setFont(font);
        g.setFont(font);
 // 画边框。
        // 画边框。 g.setColor(Color.BLACK);
        g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1);
        g.drawRect(0, 0, width - 1, height - 1);
 // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
        // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.GRAY);
        g.setColor(Color.GRAY); for (int i = 0; i < 10; i++) {
        for (int i = 0; i < 10; i++) { int x = random.nextInt(width);
            int x = random.nextInt(width); int y = random.nextInt(height);
            int y = random.nextInt(height); int xl = random.nextInt(12);
            int xl = random.nextInt(12); int yl = random.nextInt(12);
            int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl);
            g.drawLine(x, y, x + xl, y + yl); }
        }
 // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
        // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode = new StringBuffer();
        StringBuffer randomCode = new StringBuffer(); int red = 0, green = 0, blue = 0;
        int red = 0, green = 0, blue = 0;
 // 随机产生4位数字的验证码。
        // 随机产生4位数字的验证码。 for (int i = 0; i < 4; i++) {
        for (int i = 0; i < 4; i++) { // 得到随机产生的验证码数字。
            // 得到随机产生的验证码数字。 String strRand = String.valueOf(random.nextInt(10));
            String strRand = String.valueOf(random.nextInt(10));
 // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
            // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 red = random.nextInt(200);
            red = random.nextInt(200); green = random.nextInt(200);
            green = random.nextInt(200); blue = random.nextInt(200);
            blue = random.nextInt(200);
 // 产生随机高度 13至height之间
            // 产生随机高度 13至height之间 float imght = 0;
            float imght = 0; while (imght <= 12) {
            while (imght <= 12) { imght = Float
                imght = Float .parseFloat(String.valueOf(random.nextInt(height)));
                        .parseFloat(String.valueOf(random.nextInt(height))); }
            } // 用随机产生的颜色将验证码绘制到图像中。
            // 用随机产生的颜色将验证码绘制到图像中。 g.setColor(new Color(red, green, blue));
            g.setColor(new Color(red, green, blue)); g.drawString(strRand, 13 * i + 6, imght);
            g.drawString(strRand, 13 * i + 6, imght);
 // 将产生的四个随机数组合在一起。
            // 将产生的四个随机数组合在一起。 randomCode.append(strRand);
            randomCode.append(strRand); }
        } // 将四位数字的验证码保存到Session中。
        // 将四位数字的验证码保存到Session中。 HttpSession session = req.getSession();
        HttpSession session = req.getSession(); session.setAttribute("randomCode", randomCode.toString());
        session.setAttribute("randomCode", randomCode.toString());
 // 禁止图像缓存。
        // 禁止图像缓存。 resp.setHeader("Pragma", "no-cache");
        resp.setHeader("Pragma", "no-cache"); resp.setHeader("Cache-Control", "no-cache");
        resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0);
        resp.setDateHeader("Expires", 0);
 resp.setContentType("image/jpeg");
        resp.setContentType("image/jpeg");
 // 将图像输出到Servlet输出流中。
        // 将图像输出到Servlet输出流中。 ServletOutputStream sos = resp.getOutputStream();
        ServletOutputStream sos = resp.getOutputStream(); ImageIO.write(buffImg, "jpeg", sos);
        ImageIO.write(buffImg, "jpeg", sos); sos.close();
        sos.close(); }
    } }
}
 
                    
                     
                    
                 
                    
                

 
             
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号