在发送短信的时候,一般需要增加图片验证码功能,用以防刷。这里介绍下验证码生成:
请求方法:
/** * 获取生成图片验证码 * @param request * @param response * @return * @throws Exception */ @RequestMapping("/getImageCode") public void getImageCode(HttpServletRequest request, HttpServletResponse response) throws Exception { // 获取生成验证码图片 ValidatorCode imageCode = ValidatorCodeUtil.getCode(); logger.info("------ 生成的图片验证码为: " + imageCode.getCode()); // 放入session中 request.getSession().setAttribute("imageCode", imageCode.getCode()); // 禁止图像缓存 response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); // 输出流 ServletOutputStream out = null; try { // 将图片输出到Servlet输出流 out = response.getOutputStream(); ImageIO.write(imageCode.getImage(), "jpg", out); out.flush(); out.close(); } catch (Exception e) { // 异常信息 String errMsg = printException(e); logger.error("------ 生成图片验证码异常: " + errMsg); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
工具类:
import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Random; /** * 图片验证码生成工具类 * */ public class ValidatorCodeUtil { /** * 生成验证码图片 * @return */ public static ValidatorCode getCode() { // 图片宽度 int width = 80; // 图片高度 int height = 30; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 随机数生成器 Random random = new Random(); // 图像背景色 g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); // 字体大小和字体 Font font = new Font("微软雅黑", Font.HANGING_BASELINE, 28); g.setFont(font); // 画边框 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.GRAY); 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); } // 用于保存随机产生的验证码 StringBuffer randomCode = new StringBuffer(); // 验证码位数 int length = 4; // 设置备选验证码:包括"a-z"和数字"0-9" String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; int size = base.length(); // 随机产生4位验证码 for (int i = 0; i < length; i++) { // 得到随机产生的验证码数字 int start = random.nextInt(size); String strRand = base.substring(start, start + 1); // 用随机产生的颜色将验证码绘制到图像中 // g.setColor(getRandColor(1, 100)); // 调用函数出来的颜色相同 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); g.drawString(strRand, 15 * i + 6, 24); // 将产生的四个随机数组合在一起 randomCode.append(strRand); } // 图象生效 g.dispose(); ValidatorCode code = new ValidatorCode(); code.image = buffImg; code.code = randomCode.toString(); return code; } /** * 指定范围获得随机颜色 * @param fc * @param bc * @return */ private static 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); } /** * 验证码图片封装 * @author zhangdonglei * */ public static class ValidatorCode { private BufferedImage image; private String code; public BufferedImage getImage() { return image; } public String getCode() { return code; } } }
相关推荐
这个"图片验证码生成demo"是一个示例项目,用于演示如何创建这样的验证码系统。在本文中,我们将深入探讨验证码的工作原理,以及如何使用编程技术来实现一个图片验证码生成器。 验证码的主要目标是防止自动化程序...
标题中的"图片验证码生成控件"指的是一个专门用于创建图像形式的验证码的软件组件。这种控件通常会生成一组随机字符,用户在提交表单前需要正确输入这些字符,以此验证他们是真实的人而不是程序。 描述中提到"支持...
Java servlet 自动生成 图片验证码 生成 Java源码
本源码项目是基于PHP的图片验证码生成设计,包含50个文件,主要使用PHP和HTML编程语言。该项目实现了图片验证码的功能,用于表单提交验证,如注册登录等场景。系统提供了清晰的验证码图片,用户需要正确选择图片中的...
在本压缩包中,提供的代码资源是关于图片验证码生成的,这对于网站安全和防止恶意爬虫是非常重要的。 图片验证码的主要目标是增加系统安全性,防止自动登录、恶意注册、垃圾评论等问题。它们通常由一串随机字符组成...
VC++验证码生成Base64验证码png图片程序,如何使用VC++生成验证码图片,输出Base64图片给网页调用
java图片验证码生成。有干扰线。随机字符。
在Python 3中,生成图片验证码是一项常见的任务,主要用于网站的身份验证,防止自动化脚本的恶意操作。这个程序提供了一种便捷的方式,在Python环境中创建自定义的验证码。下面将详细介绍这个验证码生成程序的关键...
扩展了kaptcha图片验证码生成库, 通过配置可以简单的实现自定义背景图片, 压缩包里有readme.md
源码提供了一个生成图片验证码的工具类,适用于各种需要验证码的场景,如用户注册、登录等。该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。...
本篇文章将深入探讨图片验证码的生成原理、相关图像文件格式以及其在实际应用中的细节。 首先,我们来了解图片验证码的基本概念。它的主要目的是通过增加一道人工识别的门槛,防止恶意自动登录、批量注册等行为。...
在Python 2环境中,你可以使用各种方法来创建自定义的验证码生成程序。这里我们将深入探讨如何利用Python的Pillow库来实现这一功能。 首先,`Pillow`库是Python的一个图像处理库,它是 PIL(Python Imaging Library...
java_图片验证码生成 <servlet-name>ImageServlet <servlet-class>com.mobile.control.ImageServlet</servlet-class> <servlet-name>ImageServlet <url-pattern>/servlet/ImageServlet ...
这个是生成图片验证码的工具,可以直接使用的,使用教程在https://blog.csdn.net/qq_31844349/article/details/97185842,这个只适合学习使用,不能用在商业软件中,可能会存在BUG,所以不能使用在系统软件开发中,如果您...
vb 自身验证码生成图片并识别 源代码
java 生成随机图片验证码 ,字母数组随机组合,加干扰线
JQuery调用后台的java类产生图片验证码。 很实用,下载后可以直接运行的实例! 有什么好的建议可以Q我623791070 谢谢
好看的图片验证码,包含干扰线、噪点、扭曲图片等。。
在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。