`
liuguihua0823
  • 浏览: 110739 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA生成问答式验证码图片,支持加减算法

阅读更多
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>
<%@ page import="java.io.OutputStream"%>
<%!
	private Color getRandColor(Random random, int fc, int bc){
		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);
	}

	private String generateCheckCode(HttpServletRequest request) {
		Random random = new Random();
		int intTemp;
		int intFirst = random.nextInt(100);
		int intSec = random.nextInt(100);
		String checkCode = "";
		int result = 0;
		switch (random.nextInt(6)) {
			case 0:
				if (intFirst < intSec) {
					intTemp = intFirst;
					intFirst = intSec;
					intSec = intTemp;
				}
				checkCode = intFirst + " - " + intSec + " = ?";
				result = intFirst-intSec;
				break;
			case 1:
				if (intFirst < intSec) {
					intTemp = intFirst;
					intFirst = intSec;
					intSec = intTemp;
				}
				checkCode = intFirst + " - ? = "+(intFirst-intSec);
				result = intSec;
				break;
			case 2:
				if (intFirst < intSec) {
					intTemp = intFirst;
					intFirst = intSec;
					intSec = intTemp;
				}
				checkCode = "? - "+intSec+" = "+(intFirst-intSec);
				result = intFirst;
				break;
			case 3:
				checkCode = intFirst + " + " + intSec + " = ?";
				result = intFirst + intSec;
				break;
			case 4:
				checkCode = intFirst + " + ? ="+(intFirst+intSec);
				result = intSec;
				break;
			case 5:
				checkCode = "? + " + intSec + " ="+(intFirst+intSec);
				result = intFirst;
				break;
		}
		request.getSession().setAttribute("VERIFY_CODE", result);
		return checkCode;
	}
%>
<%
	try {
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);

		int width = 140, height = 30;

		String baseStr = generateCheckCode(request);

		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		OutputStream os = response.getOutputStream();
		Graphics g = image.getGraphics();

		Random random = new Random();

		g.setColor(getRandColor(random, 200, 250));
		g.fillRect(0, 0, width, height);

		String[] fontTypes = { "\u5b8b\u4f53", "\u65b0\u5b8b\u4f53", "\u9ed1\u4f53", "\u6977\u4f53", "\u96b6\u4e66" };
		int fontTypesLength = fontTypes.length;

		g.setColor(getRandColor(random, 160, 200));
		g.setFont(new Font("Times New Roman", Font.PLAIN, 14 + random.nextInt(6)));
		
		for (int i = 0; i < 255; 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 [] baseChar = baseStr.split(" ");
		for (int i = 0; i < baseChar.length; i++) {
			g.setColor(getRandColor(random, 30, 150));
			g.setFont(new Font(fontTypes[random.nextInt(fontTypesLength)], Font.BOLD, 22 + random.nextInt(6)));
			g.drawString(baseChar[i], 24 * i + 10, 24);
		}
		
		g.dispose();

		ImageIO.write(image, "JPEG", os);
		os.flush();
		os.close();
		os = null;
		response.flushBuffer();
		out.clear();
		out = pageContext.pushBody();
	} catch (IllegalStateException e) {
		System.out.println(e.getMessage());
		e.printStackTrace();
	}
%>
分享到:
评论

相关推荐

    java问答式教程

    在本《Java 问答式教程》中,我们将深入探讨Java编程语言的各种核心概念和技术,以问答的形式呈现,便于读者理解并解决实际问题。Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和安全性著称。本...

    java问答式教程 很好的

    Java问答式教程是针对Java初学者精心设计的一种学习资源,旨在通过解答常见问题来帮助学习者深入理解Java编程语言的核心概念和技术。这份教程涵盖了多个关键知识点,包括但不限于基础语法、面向对象编程、异常处理、...

    java面试问答题

    java面试问答题,答案详细明了java面试问答题,答案详细明了java面试问答题,答案详细明了

    Java实用简洁的问答_社区系统源码.zip

    Java实用简洁的问答_社区系统源码 Java实用简洁的问答_社区系统源码 Java实用简洁的问答_社区系统源码 Java实用简洁的问答_社区系统源码 Java实用简洁的问答_社区系统源码 Java实用简洁的问答_社区系统源码 ...

    Java 问答式教程

    **Java 问答式教程** 本教程旨在以问答形式深入浅出地讲解Java编程语言的核心概念和技术,帮助初学者和有经验的开发者巩固基础,解决实际遇到的问题。Java是一种广泛使用的面向对象的编程语言,以其跨平台性和强大...

    机器人问答,基于java开发的aiml机器人DEMO,支持中文,附送文档

    它是一个使用Java编程语言实现的问答机器人,特别强调了对中文的支持,表明该机器人能够处理和理解中文输入。同时,提供了一个DEMO(演示),方便开发者直观地了解其工作原理。另外,附带的文档将有助于学习和调试。...

    基于java的智能问答系统

    3. **机器学习(ML)**:对于复杂问题,系统可能需要借助机器学习模型来预测最佳答案,如基于深度学习的问答模型,Java中的Deeplearning4j库支持多种神经网络框架。 4. **知识图谱**:知识图谱用于结构化存储和组织...

    java知识问答服务器

    Java知识问答服务器是一种基于Java平台开发的服务器程序,它的核心目标是实现一个高效、稳定的知识问答交互系统。在这个系统中,开发者使用了`ServerSocket`类来创建服务器端的套接字,允许服务器监听并接受来自...

    JAVA知识问答器

    【JAVA知识问答器】是一个基于Java编程语言开发的智能问答系统,它涵盖了Java语言的大量知识点,旨在帮助用户深入理解和掌握Java技术。该系统利用单例模式设计,确保在整个应用程序中只有一个实例存在,以提高资源...

    java基础知识问答

    ### Java基础知识问答详解 #### 一、JRE与JDK的区别及应用场景 1. **JRE(Java Runtime Environment)**:是Java运行环境的基础部分,包括了Java虚拟机(JVM)以及Java类库标准版。它使得Java应用程序可以在任何...

    JAVA实现基于知识图谱的古诗词智能问答

    JAVA实现基于知识图谱的古诗词智能问答 使用java+ssm+springboot+maven+react+mysql 1、前端接收问句,发送至后端(涉及CSS、ajax通信) 2、对问句进行分词,每个单词标注词性(涉及用户字典) 3、对问句进行抽象...

    java开源包5

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java在线问答系统

    Java在线问答系统是一种基于Web的应用程序,用于提供用户互动式的问答环境。在这个系统中,用户可以提出问题,其他用户或专家则可以给予回答。Struts2框架被广泛应用于构建这样的系统,因为它提供了强大的MVC(Model...

    智能问答java代码

    在这个“智能问答java代码”项目中,我们可以看到开发者使用Java编程语言实现了一个简单的智能问答系统,该系统可能依赖于阿里集团提供的API接口,这表明了在实际应用中,开发者常常会借助第三方服务来增强其软件的...

    java实现《ChatGPT AI 问答助手》

    《ChatGPT AI 问答助手》 开源免费项目,涵盖爬虫接口、ChatGPT API对接、DDD架构设计、镜像打包、Docker容器部署,小巧精悍,流程全面。对于Java编程伙伴来说,非常具有学习价值。 这个项目本身是小傅哥为自己的...

    基于BM25、BGE检索算法的检索增强生成RAG示例,支持OpenAI风格的大模型服务.zip

    在当前的IT领域,检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种混合了检索和生成技术的方法,广泛应用于问答系统、聊天机器人和文本生成等任务。本示例着重介绍了如何利用BM25和BGE检索算法来提升...

    java开源包4

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包6

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包9

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包101

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

Global site tag (gtag.js) - Google Analytics