import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; public class ImageCodeUtil { private ByteArrayInputStream image;// 图像 private String str;// 验证码 public ImageCodeUtil() { // TODO Auto-generated constructor stub this.init(); } /* * 取得ImageUtil实例 */ public static ImageCodeUtil Instance() { return new ImageCodeUtil(); } /* * 取得验证码图片 */ public ByteArrayInputStream getImage() { return this.image; } /* * 取得图片的验证码 */ public String getString() { return this.str; } private void init() { // 在内存中创建图象 int width = 60, 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)); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 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); } // 取随机产生的认证码(4位数字) String sRand = ""; for (int i = 0; i < 4; 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); } // 赋值验证码 this.str = sRand; // 图象生效 g.dispose(); ByteArrayInputStream input = null; ByteArrayOutputStream output = new ByteArrayOutputStream(); try { ImageOutputStream imageOut = ImageIO .createImageOutputStream(output); ImageIO.write(image, "JPEG", imageOut); imageOut.close(); input = new ByteArrayInputStream(output.toByteArray()); } catch (Exception e) { System.out.println("验证码图片产生出现错误:" + e.toString()); } this.image = input;/* 赋值图像 */ } /* * 给定范围获得随机颜色 */ private 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 String imageCode() throws Exception{ ImageCodeUtil imgcode = ImageCodeUtil.Instance(); String navTurn = WebTools.getParameter(getRequest(), "navTurn"); setAttributeInRequest("navTurn", navTurn); this.setInputStream(imgcode.getImage());// 取得带有随机字符串的图片 ActionContext.getContext().getSession().put("adminLoginCode", imgcode.getString());// 取得随机字符串放入HttpSession return SUCCESS; }
前台调用如下:
<div><label for="">验证码:</label> <input class="login-yzm" name="imageCode" type="text" /> <img src="${ctx}/back/Admin/imageCode.do" onClick="this.src='${ctx}/back/Admin/imageCode.do?random='+Math.random()"/> <span class="codeErrorMes" style="color: red;display: none;"></span></div>
配置文件struts.xml 中需要添加:
<result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> </result>
相关推荐
Jsp 登录 验证码 实现
layui实现登陆界面验证码.docx
是关于web登陆验证码产生的C#代码,能够帮助你很快的完成验证码的实现
运行环境:jdk1.8;tomcat 8.0;导入代码后可直接运行。
java jsp验证码制作,导入jstl-1.2.jar包和standard-1.1.2.jar包
主要为大家详细介绍了javaWeb使用验证码实现简单登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android验证码的功能实现,通过自定义控件实现验证码功能
名称:验证码程序 简介:一个普通的登录验证码程序,通过按钮"换一张"切换验证码,并自动生成文件保存在本地。 原理:通过MFC绘图技术实现,绘画文字和线条,实现简单的验证码。
主要介绍了SpringBoot登录验证码实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java web登录验证码实现,分享,共勉学习。
基于asp.net mvc验证码的实现。
vue+springboot+redis+kaptcha实现登录页验证码
主要为大家详细介绍了asp.net登录验证码实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
实现spring-gateway登录验证码校验,使用randomstr参数作为每次生成验证码图片的唯一标识,验证码Kaptcha插件
jsp登录验证码,很好的登录验证码初学易懂
本文实例讲述了Bootstrap实现前端登录页面带验证码功能。分享给大家供大家参考,具体如下: Bootstrap有自定义的验证码样式,在前端页面可以直接使用,他的css、js在使用前要在开头引入 上代码: <!DOCTYPE ...
C#实现登录验证码 C#编写源代码 word介绍
Android studio :实现密码登录界面和验证码登录界面的切换(不用新建xml页面) 一、了解Xml设置隐藏属性 android:visibility=” “ Visible:正常显示 Invisible:保留位置 Gone:完全隐藏 二、实现图示 Java...
必备VcodeExtractor.jar 包,放进jmeter\lib\ext目录下,重启jmeter 就可以使用了
资源名:asp.net短信登录验证码和图片验证程序源码 资源类型:程序源代码 源码说明: 1.实现了验证码倒计时的功能 1.以下验证码例子采用的是先获取手机号文字验证码,如果文字验证码收不到,将采用语音播放验证码的...