java 生成验证码详解编程语言

/** 
 *  
 */ 
package com.becom.dkyd.webapp.util; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.util.Random; 
import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.ServletOutputStream; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
import com.becom.dkyd.common.Constant; 
public class RandomCodeServlet extends HttpServlet 
{ 
    /** 
     * serialVersionUID 
     */ 
    private static final long serialVersionUID = 5916019367240722024L; 
     
    private int width = 60; 
     
    private int height = 20; 
    @Override 
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    { 
        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
        Graphics2D g = img.createGraphics(); 
         
        Random random = new Random(); 
         
        g.setColor(Color.WHITE); 
        g.fillRect(0, 0, width, height); 
         
        Font font = new Font("Times New Roman", Font.PLAIN, 18); 
        g.setFont(font); 
         
        // 边框 
        g.setColor(Color.BLACK); 
        g.drawRect(0, 0, width - 1, height - 1); 
         
        // 干扰线 
        g.setColor(Color.GRAY); 
        for (int i = 0; i < 60; i++) 
        { 
            int x = random.nextInt(width); 
            int y = random.nextInt(height); 
            int x1 = random.nextInt(12); 
            int y1 = random.nextInt(12); 
            g.drawLine(x, y, x + x1, y + y1); 
        } 
         
        // 保存验证码 
        StringBuffer randomCode = new StringBuffer(); 
        int red = 0; 
        int green = 0; 
        int blue = 0; 
         
        // 生成验证码 
        for (int i = 0; i < 4; i++) 
        { 
        String strRand = String.valueOf(random.nextInt(10)); 
             
            red = random.nextInt(110); 
            green = random.nextInt(50); 
            blue = random.nextInt(50); 
             
            g.setColor(new Color(red, green, blue)); 
            g.drawString(strRand, 13 * i + 6, 16); 
             
            randomCode.append(strRand); 
        } 
         
        // 验证码放入session中 
        HttpSession session = req.getSession(); 
        //需要验证的地方 
        //加入session 
        
        // 禁止图象缓存 
        resp.setHeader("Pragma", "no-cache"); 
        resp.setHeader("Cache-Control", "no-cache"); 
        resp.setDateHeader("Expires", 0); 
         
        resp.setContentType("image/jpeg"); 
         
        // 输出图象 
        ServletOutputStream sos = resp.getOutputStream(); 
        ImageIO.write(img, "jpeg", sos); 
        sos.close(); 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10231.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论