java Image verification code implementation code, friends in need can refer to it
The code is as follows:
makeCertPic.java package pic; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; /** * @author dzy * 生成验证码图片 */ public class makeCertPic { //验证码图片中可以出现的字符集,可根据需要修改 private char mapTable[]={ 'a','b','c','d','e','f', 'g','h','i','j','k','l', 'm','n','o','p','q','r', 's','t','u','v','w','x', 'y','z','0','1','2','3', '4','5','6','7','8','9'}; /** * 功能:生成彩色验证码图片 * 参数width为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流 */ public String getCertPic(int width, int height, OutputStream os) { if(width<=0)width=60; if(height<=0)height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 设定背景色 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, width, height); //画边框 g.setColor(Color.black); g.drawRect(0,0,width-1,height-1); // 取随机产生的认证码 String strEnsure = ""; // 4代表4位验证码,如果要生成更多位的认证码,则加大数值 for(int i=0; i<4; ++i) { strEnsure+=mapTable[(int)(mapTable.length*Math.random())]; } // 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句 g.setColor(Color.black); g.setFont(new Font("Atlantic Inline",Font.PLAIN,18)); String str = strEnsure.substring(0,1); g.drawString(str,8,17); str = strEnsure.substring(1,2); g.drawString(str,20,15); str = strEnsure.substring(2,3); g.drawString(str,35,18); str = strEnsure.substring(3,4); g.drawString(str,45,15); // 随机产生10个干扰点 Random rand = new Random(); for (int i=0;i<10;i++) { int x = rand.nextInt(width); int y = rand.nextInt(height); g.drawOval(x,y,1,1); } // 释放图形上下文 g.dispose(); try { // 输出图像到页面 ImageIO.write(image, "JPEG", os); } catch (IOException e) { return ""; } return strEnsure; } }
In the getCertPic() method, an instance object of the memory image is first created. Then get the graphics context object of this memory image, and then use this context object to draw the background and border. Next, 4 characters in the mapTable[] array are randomly generated to form a string as a verification string and output in the memory. In order to cause a certain amount of interference, 10 interference points are randomly drawn. If you want to increase the interference effect , you can draw some more points.
makeCertPic.jsp page is used to call the JavaBean that generates the verification code image and displays it on the client. The source code is as follows:
MakeCertPic.jsp
The code is as follows:
<%@page contentType="image/jpeg" %> <jsp:useBean id="image" scope="page" class="pic.makeCertPic" /> <% String str=image.getCertPic(0,0,response.getOutputStream()); // 将认证码存入SESSION session.setAttribute("certCode", str); out.clear(); out = pageContext.pushBody(); %>
The generated verification code is written here as a session variable, so in the data page that receives input from the login page, the verification code entered by the user can be compared with this session variable. If they are the same, the verification is passed.
LoginPic.jsp
The code is as follows:
<%@ page contentType="text/html;charset=GB2312" %> <script type="text/javascript"> function reloadcode(){ var verify=document.getElementById('code'); verify.setAttribute('src','makeCertPic.jsp?it='+Math.random()); }</script> <html> <head><title>登录页面</title></head> <body> <table align="center" border="0"> <tralign="center"><td><fontcolor="red"><html:errors/></font></td></tr> <tr align="center"><td>系统登录</td></tr> <form. action="loginCheck.jsp" method="post" focus="username"> <tr><td>用户名:<input type="text" name="username"/></td></tr> <tr><td>密 码:<input type="password"name="password"/></td></tr> <tr><td>验证码<img src="makeCertPic.jsp" id="code" onclick="reloadcode()" style="cursor: pointer;" alt="看不清楚,换一张"> </td></tr><tralign="left"><td> <input type="submit" value="确定"/></td></tr> </form> </table> </body> </html>
Whether the verification code is entered correctly can be verified by the following statement:
The code is as follows:
String certCode=request.getParameter("certCode"); if(certCode.equals((String)session.getAttribute("certCode"))) out.print("验证码输入正确"); else out.print("验证码输入错误");
The above is the detailed content of Code example of implementing image verification code in java. For more information, please follow other related articles on the PHP Chinese website!