Java生成验证码图片的具体代码,供大家参考,具体内容如下
1、首先新建一各专门生成验证码图片的类VerifyCode:
public class VerifyCode { private int w=70; private int h=35; private Random r=new Random(); //宋体,华文楷书,黑体,华文新魏,华文隶书,微软雅黑,楷体_GB2312,Times New Roman private String [] fontNames={"宋体","华文楷书","黑体","华文新魏","微软雅黑","华文隶书","楷体_GB2312","Times New Roman"}; //可选的字符 private String codes="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; //背景色 private Color bgColor=new Color(255,255,255); //验证码上的文本 private String text; //生成随机颜色 private Color randomColor(){ int red=r.nextInt(150); int green=r.nextInt(150); int blue=r.nextInt(150); return new Color(red,green,blue); } //生成随机字体 private Font randomFont(){ int index=r.nextInt(fontNames.length);//获取下标 String fontName=fontNames[index];//生成随机的字体名称 int style=r.nextInt(4);//获取随机样式,0表示无样式,1表示粗体,2表示斜体,3表示粗体加斜体 int size=r.nextInt(5)+24;//生成随机字号,24~28 return new Font(fontName,style,size); } //画干扰线 private void drawLine(BufferedImage image){ int num=3;//一共画3条 Graphics2D g2=(Graphics2D) image.getGraphics(); for(int i=0;i<num;i++){//随机生成坐标,即4个值 int x1=r.nextInt(w); int y1=r.nextInt(h); int x2=r.nextInt(w); int y2=r.nextInt(h); g2.setStroke(new BasicStroke(1.5F));//设置笔画的宽度 g2.setColor(Color.blue);//干扰线颜色 g2.drawLine(x1, y1, x2, y2);//画线 } } //随机生成一个字符 private char randomChar(){ int index=r.nextInt(codes.length()); return codes.charAt(index); } //创建BufferedImage private BufferedImage createImage(){ BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); Graphics2D g2=(Graphics2D) image.getGraphics(); g2.setColor(this.bgColor); g2.fillRect(0, 0, w, h); return image; } //外界调用这个方法得到验证码 public BufferedImage getImage(){ BufferedImage image=createImage();//创建图片缓冲区 Graphics2D g2=(Graphics2D)image.getGraphics();//得到绘制环境 StringBuilder sb=new StringBuilder();//用来装载生成的验证码文本 //向图中画4个字符 for(int i=0;i<4;i++){//循环4次 String s=randomChar()+"";//随机生成一个字符 sb.append(s);//把字母添加到sb中 double x=i*1.0*w/4;//设置当前字符的x轴坐标 g2.setFont(randomFont());//设置随机字体 g2.setColor(randomColor());//设置随机颜色 g2.drawString(s, (int)x, h-5); } this.text=sb.toString();//把生成的字符串赋给了this.text drawLine(image);//添加干扰线 return image; } //返回验证码图片上面的文本 public String getText(){ return text; } //保存图片到指定的输出流 public static void output(BufferedImage image,OutputStream out) throws IOException{ ImageIO.write(image, "JPEG", out); } }
2、在jsp页面上应用:
其核心代码如下:
<form action="/test/LoginServlet" method="post"> 用户名:<input type="text" name="username" value="<%=uname %>"><br> 密 码:<input type="password" name="password"><br> 验证码:<input type="text" name="verifyCode"> <img id="img" src="/test/VerifyCodeServlet"> <a href="JavaScript:_change()" rel="external nofollow" >看不清换一张</a><br> <input type="submit" value="登录"> </form>
看不清换一张使用javascript实现,代码如下:
<script type="text/javascript"> function _change(){ /** *1.得到image图片 *2.修改其src为/test/VerifyCodeServlet */ var imgEle=document.getElementById("img"); imgEle.src="/test/VerifyCodeServlet?a="+new Date().getTime(); } </script>
+new Date().getTime()这条语句可以欺骗浏览器,以为请求是新的,实现验证码的改变。
3、在第2步中,VerifyCodeServlet的实现生成一张验证码,并且通过session域保存验证码图片对应的文本内容,为后面的登录验证验证码是否正确做准备。核心代码如下:
public class VerifyCodeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1.生成图片 * 2.保存图片上的文本到session域中 * 3.把图片响应给客户端 */ VerifyCode vc=new VerifyCode(); BufferedImage image=vc.getImage(); //保存图片上的文本到session域 request.getSession().setAttribute("session_code", vc.getText()); VerifyCode.output(image, response.getOutputStream()); } }
4、最后一步,实现登录验证验证码是否正确,其核心代码如下:
public class LoginServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 校验验证码 * 1.从session中获取正取的验证码 * 2.从表单中获取用户填写的验证码 * 3.进行比较 * 4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp */ String sessionCode=(String) request.getSession().getAttribute("session_code");//获得的验证码里面对应的文本内容 String paramCode=request.getParameter("verifyCode");//用户输入文本框里面的内容 if(!paramCode.equalsIgnoreCase(sessionCode)){ request.setAttribute("msg", "验证码错误!"); request.getRequestDispatcher("/login.jsp").forward(request, response);//打回到登录界面。 return;//返回,不继续执行下面的语句。 } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍java生成图片验证码实例代码,包括了java生成图片验证码实例代码的使用技巧和注意事项,需要的朋友参考一下 关于java图片验证码的文章最近更新了不少,帮助大家掌握java验证码的生成技术,下文为大家分享了java生成图片验证码最简单的方法,供大家参考。 现在各行业在定制系统时都会考虑到机器注册,现在最有效的方式就是输入验证。现在的验证方式有很多种: 一、问题验证,其实也是图片验证
本文向大家介绍python图片验证码生成代码,包括了python图片验证码生成代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python图片验证码实现代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。
本文向大家介绍java生成图片验证码的示例代码,包括了java生成图片验证码的示例代码的使用技巧和注意事项,需要的朋友参考一下 给大家分享一款java生成验证码的源码,可设置随机字符串,去掉了几个容易混淆的字符,还可以设置验证码位数,比如4位,6位。当然也可以根据前台验证码的位置大小,设置验证码图片的大小。下边是源码分享,直接看吧,很简单! 创建servlet类 创建工具类 配置 web.xml
本文向大家介绍python生成验证码图片代码分享,包括了python生成验证码图片代码分享的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python生成验证码图片代码,分享给大家供大家参考,具体内容如下 基本上大家使用每一种网络服务都会遇到验证码,一般是网站为了防止恶意注册、发帖而设置的验证手段。其生成原理是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OC
本文向大家介绍php生成图片验证码,包括了php生成图片验证码的使用技巧和注意事项,需要的朋友参考一下 先给看下 大致的效果 那么接下来的就直接贴代码吧 再给大家分享一个可以生成中文验证码 再来一个实例吧 接下来只要在页面中调用就可以了: 如果想实现 "看不清?换一张" 效果,添加如下 JS 到页面中 以上所述就是本文的全部内容了,希望大家能够喜欢。
本文向大家介绍iOS 生成图片验证码绘制实例代码,包括了iOS 生成图片验证码绘制实例代码的使用技巧和注意事项,需要的朋友参考一下 登录注册时用的验证码效果图 ViewDidload调用即可 github下载地址 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。