博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证码
阅读量:6290 次
发布时间:2019-06-22

本文共 3184 字,大约阅读时间需要 10 分钟。

1 package cn.meeting.utils; 2  3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.image.BufferedImage; 7 import java.io.IOException; 8 import java.io.OutputStream; 9 import java.util.Random;10 11 import javax.imageio.ImageIO;12 import javax.servlet.ServletException;13 import javax.servlet.http.HttpServlet;14 import javax.servlet.http.HttpServletRequest;15 import javax.servlet.http.HttpServletResponse;16 import javax.servlet.http.HttpSession;17 18 public class ImgServlet extends HttpServlet {19     private static final long serialVersionUID = 1L;20 21     protected void doGet(HttpServletRequest request, HttpServletResponse response)22             throws ServletException, IOException {23         // 1:声明高宽24         int width = 60;25         int height = 30;26         // 2:定义内存中的图片27         BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);28         // 4:获取G29         Graphics g = img.getGraphics();30         // 5:设置背景为white31         g.setColor(Color.WHITE);32         g.fillRect(0, 0, width, height);33         g.setFont(new Font("宋体", Font.BOLD, 18));34         //35         Random r = new Random();36         StringBuilder stringBuilder = new StringBuilder();37         String str="";38         for (int i = 0; i < 4; i++) {39             //int a = r.nextInt(10);   生成数字验证码40             41             //生成字母验证码42              /*int t = r.nextInt(2);43              char a = t ==0? (char)(r.nextInt(26)+'a'):(char)(r.nextInt(26)+'A');44              stringBuilder.append(a);*/45             46             str = getRandomChar();47             stringBuilder.append(str);48             g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));49             g.drawString("" + str, i * 15, 10 + r.nextInt(20));50         }51 52         //------将验证码保存到session中去53         54         HttpSession session = request.getSession();55         session.setAttribute("randomNum", str);56         57         for (int i = 0; i < 8; i++) {58             g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));59             g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));60         }61 62         //63         g.dispose();64 65         // 设置输出的类型66         response.setContentType("image/jpg");67         OutputStream out = response.getOutputStream();68         // 使用ImageIO69         ImageIO.write(img, "JPEG", out);70     }71     72     /*73      * 生成验证码的方法74      */75      public static String getRandomChar() { 76          int index = (int) Math.round(Math.random() * 2); 77          String randChar = ""; 78          switch (index) { 79          case 0://大写字符 80              randChar = String.valueOf((char)Math.round(Math.random() * 25 + 65)); 81              break; 82          case 1://小写字符 83              randChar = String.valueOf((char)Math.round(Math.random() * 25 + 97)); 84              break; 85          default://数字 86              randChar = String.valueOf(Math.round(Math.random() * 9)); 87              break; 88          } 89          return randChar; 90      } 91 }

 

转载于:https://www.cnblogs.com/fujilong/p/5327858.html

你可能感兴趣的文章
@RequestMapping 用法详解之地址映射
查看>>
254页PPT!这是一份写给NLP研究者的编程指南
查看>>
《Data Warehouse in Action》
查看>>
String 源码浅析(一)
查看>>
Spring Boot 最佳实践(三)模板引擎FreeMarker集成
查看>>
Fescar 发布 0.2.3 版本,支持 Redis 和 Apollo
查看>>
Google MapReduce到底解决什么问题?
查看>>
CCNP-6 OSPF试验2(BSCI)
查看>>
Excel 2013 全新的图表体验
查看>>
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
python分析postfix邮件日志的状态
查看>>
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>