图片验证码
1.今天从网上找了一个图片验证码的例子,很好,看代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | package com.zhao.util; 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.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class AuthImg extends HttpServlet { private Font mFont = new Font( "Arial Black" , Font.BOLD, 16); //字体,风格,字号 public void init() throws ServletException { super.init(); //applet初始化,在applet首次创建时执行 } Color getRandColor( int fc, int bc) //随机产生r,g,b均在fc和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); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader( "Pragma" , "No-cache" ); response.setHeader( "Cache-Control" , "no-cache" ); response.setDateHeader( "Expires" , 0); response.setContentType( "image/jpeg" ); int width=100, height=150; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); Graphics g = image.getGraphics(); Random random = new Random(); g.setColor(getRandColor(200,250)); g.fillRect(1, 1, width-1, height-1); g.setColor( new Color(102,102,102)); g.drawRect(0, 0, width-1, height-1); //画矩形。左角坐标,宽,高 g.setFont(mFont); g.setColor(getRandColor(160,200)); for ( int i=0;i<155;i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x,y,x + xl,y + yl); //画直线起点坐标、终点坐标 } for ( int i = 0;i < 70;i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x,y,x - xl,y - yl); } String sRand= "" ; for ( int i=0;i<6;i++) { String tmp = getRandomChar(); sRand += tmp; g.setColor( new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(tmp,15*i+10,15); //写文本tmp } HttpSession session = request.getSession( true ); session.setAttribute( "rand" ,sRand); g.dispose(); ImageIO.write(image, "JPEG" , response.getOutputStream()); } private String getRandomChar() //产生文本 { int rand = ( int )Math.round(Math.random() * 2); long itmp = 0; char ctmp = '\u0000' ; switch (rand) { case 1: itmp = Math.round(Math.random() * 25 + 65); ctmp = ( char )itmp; return String.valueOf(ctmp); case 2: itmp = Math.round(Math.random() * 25 + 97); ctmp = ( char )itmp; return String.valueOf(ctmp); default : itmp = Math.round(Math.random() * 9); return String.valueOf(itmp); } } } |
2.原作者给的步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 1.建立一个AuthImg类,用来生成验证码 2.在web中配置AuthImg <servlet> <servlet-name>img</servlet-name> <servlet- class >com.zhao.util.AuthImg</ class - class > </servlet> <servlet-mapping> <servlet-name>img</servlet-name> <url-pattern>/authImg</url-pattern> </servlet-mapping> 3.页面上: 验证码如图:<img src= "authImg" id= "authImg" />看不清?<a href= "#" onClick= "refresh()" >单击此处刷新</a> <SCRIPT type= "text/javascript" > function refresh(){ document.getElementById( "authImg" ).src= 'authImg?now=' + new Date(); } </SCRIPT> 4.AuthImg.java |
3.截图(框框改的有点大)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!