day100-javaweb-response实现随机验证码
编写验证码生成的函数
public String makenum(){ Random random = new Random(); String num = random.nextInt(99999) + ""; StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < 5 - num.length(); i++) { stringBuffer.append("0"); } num = stringBuffer.toString() + num; return num; }
编写servlet请求网页写入一个图片
public class ImageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //让浏览器五秒刷新一次 resp.setHeader("refresh","3"); //在内存中创建一个图片 BufferedImage bufferedImage = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB); //得到一个图片 Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics(); //设置图片 graphics.setColor(Color.white); graphics.fillRect(0,0,80,20); //给图片写数据 graphics.setColor(Color.BLUE); graphics.setFont(new Font(null,Font.BOLD,20)); graphics.drawString(makenum(),0,20); //告诉浏览器请求用浏览器方式打开 resp.setContentType("image/jpg"); //取消浏览器缓存 resp.setDateHeader("expires",-1); resp.setHeader("Cache-Control","no-cache"); resp.setHeader("Pragma","no-cache"); //写入浏览器 ImageIO.write(bufferedImage,"jpg", resp.getOutputStream()); }
改进
//1.定义一个方法返回一个随机验证码,n为生成几位的验证码 public static String makenum(int n) { String codes=""; Random r=new Random(); //2.定义一个for循环,随机n次,随机生成字符 for(int i=0;i<n;i++) { //3.生成随机字符,可能是数字,大写字母,小写字母 int num=r.nextInt(3); switch(num) { case 0: //数字:0-9 codes+=r.nextInt(10); break; case 1: //大写字母:A(65)-Z(65+25) char ch1=(char)(r.nextInt(26)+65); codes+=ch1; break; case 2: //小写字母:a(97)-z(97+25) char ch2=(char)(r.nextInt(26)+97); codes+=ch2; break; } } return codes; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南