欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

随机验证码的生成

程序员文章站 2022-07-14 13:17:40
...

随机验证码的生成

我们先新建了一个CaptcheController的类用来显示验证码
随机验证码的生成
然后我们还需要一个StrUtil的一个randomStr方法来产生随机数

 public static String randomStr(int count)
    {
        Random rnds = new Random();

        StringBuilder stringBuilder=new StringBuilder();
        //str用来存放随机数
        String str="abcdefghijklmnpqrstuvwxy0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
		//用一个循环去随机去str字符串里的字符
        for(int i=0;i<count;i++)
        {
            int pos = rnds.nextInt(str.length());
            stringBuilder.append(str.substring(pos,pos+1));

        }
        return stringBuilder.toString();
    }

随机验证码显示

在CaptcheController类中新建了一个用来显示二维码的方法

	private final int WIDTH=100;
    private final int HEIGHT=80;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletOutputStream sos = resp.getOutputStream();
        //通过调用StrUtil.randomStr(4)来产生随机数,传入你想产生随机数的数量。
        String str=StrUtil.randomStr(4);
        
        //通过调用GeneratePic函数来产生随机数
        ImageIO.write(GeneratePic(100,80,str),"JPEG",sos);

        sos.flush();
        sos.close();

    }

产生验证码的函数如下

private BufferedImage GeneratePic(int width,int height,String str){
        BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
        Graphics g=image.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0,0,width,height);

        Random rnd=new Random();

        g.setFont(new Font("宋体",Font.BOLD,20));
//        Color color= new Color(100,100,100);
        Color color= new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256));
        g.setColor(color);

        



        int base= WIDTH / str.length();

        for(int i=0;i<str.length();i++){
            String s= str.substring(i,i+1);

            int x= i*base + rnd.nextInt(base-5);
            int y=15+rnd.nextInt(HEIGHT-20);
            g.drawString(s,x,y);
        }



//        int p=rnd.nextInt(2)+3;

        return image;

    }

完成以上几个步骤就可以对验证码的进行基本的生成了

相关标签: java maven