使用servlet生成水印验证码

本文介绍了一种使用Java生成包含随机字符的验证码图片的方法。通过创建图片并设置背景、边框颜色,再随机生成字符绘制到图片上,并添加干扰线以提高破解难度。最后通过HTTP响应将图片以JPEG格式发送给客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 创建图片 -- 在内存中

       int width = 80;

       int height = 40;

       BufferedImage image = newBufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

       

       //创建图层,获得画板

       Graphics g = image.getGraphics();

       //确定画笔颜色

       g.setColor(Color.BLACK);

       //填充一个矩形

       g.fillRect(0, 0, width, height);

       //只需要一个边框

       //设置颜色

       g.setColor(Color.WHITE);

       //填充一个矩形

       g.fillRect(1, 1, width -2, height -2);

       

       //填充字符

       String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

       //设置字体

       g.setFont(new Font("宋体",Font.BOLD,30));

       

       //缓存随机生成的字符

       StringBuffer buf = new StringBuffer();

       

       //随机获得4个字符

       Random random = new Random();

       for(int i = 0 ; i < 4 ; i++){

          //设置随机颜色

          g.setColor(newColor(random.nextInt(255),random.nextInt(255),random.nextInt(255)));

          //获得一个随机字符

          int index = random.nextInt(62);

          //截取字符串

          String str =data.substring(index, index + 1);  //[)

          //需要将随机的字符,写到图片中

          g.drawString(str, 20 * i, 30);

          //缓存

          buf.append(str);

       }

       

       //将获得随机字符串,保存到session

       // * 获得session

       HttpSession session =request.getSession();

       // * 保存值

       session.setAttribute("number", buf.toString());

       

       //干扰线

       for(int i = 0 ; i < 10 ; i ++){

          //设置随机颜色

          g.setColor(newColor(random.nextInt(255),random.nextInt(255),random.nextInt(255)));

          //随机画直线

          g.drawLine(random.nextInt(width),random.nextInt(height), random.nextInt(width), random.nextInt(height));

       }

       

       

       

       /**

        * <extension>jpg</extension>

       <mime-type>image/jpeg</mime-type>

        */

              //通知浏览器发送的数据时一张图片

              response.setContentType("image/jpeg");

              //将图片发送给浏览器

       ImageIO.write(image,"jpg", response.getOutputStream());

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值