java图片验证码 左手的ㄟ右手 2022-08-07 06:37 188阅读 0赞 第一步:创建一个Servlet文件 //数字随机码 public class generateCode extends HttpServlet \{ private static final long serialVersionUID = 5039673797977591965L; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException \{ processRequest(req, resp); \} protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException \{ processRequest(req, resp); \} public void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException \{ response.setContentType("11.gif"); //要设定好一个图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); HttpSession session = request.getSession(); int width = 80, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE\_INT\_RGB); Graphics g = image.getGraphics(); Random random = new Random(); g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) \{ int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); \} String sRand = ""; for (int i = 0; i < 6; i++) \{ String rand = String.valueOf(random.nextInt(10)); sRand += rand; g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(rand, 13 \* i + 6, 16); \} session.setAttribute("rand", sRand); g.dispose(); ServletOutputStream responseOutputStream = response.getOutputStream(); ImageIO.write(image, "JPEG", responseOutputStream); responseOutputStream.flush(); responseOutputStream.close(); \} Color getRandColor(int fc, int 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); \} \} **第二步 设置web.xml** <servlet> <servlet-name>showImgCode</servlet-name> <servlet-class>generateCode </servlet-class> </servlet> <servlet-mapping> <servlet-name>showImgCode</servlet-name> <url-pattern>/11.GIF</url-pattern> </servlet-mapping> **第三步 创建相应的JSP** index.jsp <%@ page contentType="text/html;charset=gb2312"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>认证码输入页面</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="0"> <script language="JavaScript"> function myrefresh() \{ window.location.reload(); \} </script> </head> <body> <form method=post action="check.jsp"> <table> <tr> <td align=left> 系统产生的认证码: </td> <td> <img border=0 src="11.GIF"> <input type="button" value="看不清,在换一张" οnclick="myrefresh()"> </td> </tr> <tr> <td align=left> 输入上面的认证码: </td> <td> <input type=text name=rand maxlength=6 value=""> </td> </tr> <tr> <td colspan=2 align=center> <input type=submit value="提交检测"> </td> </tr> </table> </form> </body> </html> **Check.jsp** <%@ page contentType="text/html; charset=gb2312" language="java" errorPage=""%> <html> <head> <title>认证码验证页面</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="0"> </head> <body> <% String rand = (String) session.getAttribute("rand"); String input = request.getParameter("rand"); %> 系统产生的认证码为: <%=rand%><br> 您输入的认证码为: <%=input%><br> <br> <% if (rand.equals(input)) \{ %> <font color=green>输入相同,认证成功!</font> <% \} else \{ %> <font color=red>输入不同,认证失败!</font> <% \} %> </body> </html> ================== **长生字符和数据的验证码** public class CharactorCode extends HttpServlet \{ private static final long serialVersionUID = 4347521091342882490L; private Font mFont = new Font("Arial Black", Font.PLAIN, 16); public void init() throws ServletException \{ super.init(); \} Color getRandColor(int fc, int 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("11.gif"); int width = 100, height = 18; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE\_INT\_RGB); 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); \} 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); \} \} \}
还没有评论,来说两句吧...