zoukankan      html  css  js  c++  java
  • java生成验证码

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletResponse;
    
    public class RandImgCreater {
        //默认字符列表
        private static final String CODE_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
        //验证码图片高度
        private static final int HEIGHT = 20;
        //默认字符数
        private static final int FONT_NUM = 4;
        //生成验证码图片存放位置
        private HttpServletResponse response;
        //宽度
        private int width = 0;
        //实际字符个数
        private int iNum = 0;
        //实际字符列表
        private String codeList = "";
        //绘制背景
        private boolean drawBgFlag = false;
        //R
        private int rBg = 0;
        //G
        private int gBg = 0;
        //B
        private int bBg = 0;
    
        //构造函数(自定义存放位置)
        public RandImgCreater(HttpServletResponse response) {
            this.response = response;
            this.width = 13 * FONT_NUM + 12;
            this.iNum = FONT_NUM;
            this.codeList = CODE_LIST;
        }
        //构造函数(自定义存放位置,字符数)
        public RandImgCreater(HttpServletResponse response,int iNum) {
            this.response = response;
            this.width = 13 * iNum + 12;
            this.iNum = iNum;
            this.codeList = CODE_LIST;
        }
        
        //构造函数(自定义存放位置,字符数,字符列表)
        public RandImgCreater(HttpServletResponse response, int iNum,
                String codeList) {
            this.response = response;
            this.width = 13 * iNum + 12;
            this.iNum = iNum;
            this.codeList = codeList;
        }
    
        //绘制验证码
        public String createRandImage() {
            //1.生成BufferedImage对象,存放图片
            BufferedImage image = new BufferedImage(width, HEIGHT,
                    BufferedImage.TYPE_INT_RGB);
    
            //2.获得BufferedImage对象的画笔
            Graphics g = image.getGraphics();
            
            //生成随机数生成器
            Random random = new Random();
    
            //开始绘制背景
            if (drawBgFlag) { 
                //设置画笔颜色
                g.setColor(new Color(rBg, gBg, bBg));
                //绘制矩形
                g.fillRect(0, 0, width, HEIGHT);
            } else {
                //设置画笔颜色(随机)
                g.setColor(getRandColor(200, 250));
                //绘制矩形
                g.fillRect(0, 0, width, HEIGHT);
                //循环155次生成随机干扰线条
                for (int i = 0; i < 155; i++) {
    //                设置颜色
                    g.setColor(getRandColor(140, 200));
                    //起始位置x
                    int x = random.nextInt(width);
                    //起始位置y
                    int y = random.nextInt(HEIGHT);
                    //结束位置x1
                    int xl = random.nextInt(12);
                    //结束位置y1
                    int yl = random.nextInt(12);
                    //绘制线条
                    g.drawLine(x, y, x + xl, y + yl);
                }
            }
            //设置画笔字体、样式、大小
            g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
            
            //要返回的字符串
            String sRand = "";
            //循环内随机生成字符
            for (int i = 0; i < iNum; i++) {
                //随机生成字符起始位置
                int rand = random.nextInt(codeList.length());
                //从字符起始位置截取1位字符
                String strRand = codeList.substring(rand, rand + 1);
                //把新生成的字符与旧字符连接(返回用)
                sRand += strRand;
                //设置前景色(字体颜色)
                g.setColor(new Color(20 + random.nextInt(110), 20 + random
                        .nextInt(110), 20 + random.nextInt(110)));
                //绘制字符,第一个字符从0位置开始,每个字符相隔13像素
                g.drawString(strRand, 13 * i + 6, 16);
            }
            //释放资源
            g.dispose();
            try {
                //把图片输出到相应位置
                ImageIO.write(image, "JPEG", response.getOutputStream());
            } catch (IOException e) {
    
            }
            //返回验证码的字符
            return sRand;
        }
    
        //设置背景色(R,G,B颜色)
        public void setBgColor(int r, int g, int b) {
            drawBgFlag = true;
            this.rBg = r;
            this.gBg = g;
            this.bBg = b;
        }
    
        //随机生成颜色
        private 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);
        }
    }

    效果:

    生成验证码

    http://yuncode.net/code/c_5222e29542bff63

  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/549294286/p/3439030.html
Copyright © 2011-2022 走看看