最近在弄验证码,从网上找了些代码,再整理下帖在下面,供大家参考:
1.生成gif图片格式的
package com.cssweb.common.util; import java.io.*; import java.util.*; import com.sun.image.codec.jpeg.*; import javax.servlet.*; import javax.servlet.http.*; import java.awt.*; import java.awt.image.*; /* * 功能:调用AuthServlet可以生成一个验证码图片,图片的宽度和高度可以自定义 * 调用格式: /servlet/AuthServlet?width=60&height=20 * 或者/servlet/AuthServlet * 时间:2007-9-4 * * */ public class AuthServlet extends HttpServlet { private static final long serialVersionUID = 8433932715396048208L; private Font mFont=new Font("Times New Roman", Font.PLAIN,18);//设置字体 // 处理post public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { // 取得一个1000-9999的随机数 HttpSession session=request.getSession();//request.getSession(false)当参数为false时,有可能不创建session response.setContentType("image/gif"); response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); int width=60; int height=20; if(request.getParameter("width")!=null && !request.getParameter("width").equals("")) width = Integer.parseInt(request.getParameter("width")); if(request.getParameter("height")!=null && !request.getParameter("height").equals("")) height = Integer.parseInt(request.getParameter("height")); ServletOutputStream out=response.getOutputStream(); BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //设置图片大小的 Graphics gra=image.getGraphics(); Random random=new Random(); gra.setColor(getRandColor(200,250)); //设置背景色 gra.fillRect(0,0,width,height); gra.setColor(Color.black); //设置字体色 gra.setFont(mFont); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 gra.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); gra.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; // 将认证码显示到图象中 gra.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 gra.drawString(rand,13*i+6,16); } //System.out.println("showimage="+sRand); //session.setAttribute("getImg",sRand); session.setAttribute("vnum",sRand); //AuthCode = sRand; //session.putValue("AuthCode",sRand); JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); encoder.encode(image); //out.flush(); } 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); } static public String getAuthCode(HttpSession session){//返回验证 return (String)session.getAttribute("AuthCode"); } }
2.生成png格式的图片
/* * @(#)version 1.0 Feb 25, 2009 * @author hujun * CodeMakerServlet.java * Copyright 2008 CSS WEB Microsystems, Inc. All rights reserved. * CSS WEB ROOM PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.cssweb.common.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Date; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CodeMakerServlet extends HttpServlet { private static final long serialVersionUID = 8226534304924504314L; private Random random = new Random(new Date().getTime()); /* private Font[] codeFont = { new Font("Algerian", Font.BOLD, 65), new Font("Vivaldi", Font.BOLD, 85), new Font("Broadway", Font.BOLD, 60), new Font("Forte", Font.BOLD, 75) }; private Color[] color = { Color.BLACK, Color.RED, Color.DARK_GRAY, Color.BLUE }; */ String codeNumbers = ""; //int width = 250, height = 70; int width=80, height=25; public CodeMakerServlet() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 清空缓冲区 response.reset(); // 注意这里的MIME类型 response.setContentType("image/png"); // 设置页面不缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 创建一个 250X70 的图像 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 得到图形环境对象 g Graphics g = image.getGraphics(); // 填充背景 g.setColor(getRandColor(240,255)); g.fillRect(0, 0, width, height); for (int i = 0; i<4; i++) { drawCode(g, i); } drawNoise(g, 100); // 绘制边框 g.setColor(Color.black); //g.setColor(getRandColor(160,200)); g.drawRect(0, 0, width - 1, height - 1); // 将验证码内容保存进session中 HttpSession session = request.getSession(); session.setAttribute("vnum", codeNumbers); // 重设字符串 codeNumbers = ""; // 利用ImageIO类的write方法对图像进行编码 ServletOutputStream sos = response.getOutputStream(); ImageIO.write(image, "PNG", sos); sos.close(); } // 绘制验证码 public void drawCode(Graphics graphics, int i) { int number = (int)(Math.random() * 10); graphics.setFont(new Font("Times New Roman",Font.PLAIN,24)); graphics.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); //graphics.setFont(codeFont); //graphics.setColor(color); graphics.drawString("" + number, 15*i+4, 18); codeNumbers += number; } // 绘制干扰线 public void drawNoise(Graphics graphics, int lineNumber) { graphics.setColor(getRandColor(160,200)); for (int i = 0; i<lineNumber; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); graphics.drawLine(x,y,x+xl,y+yl); } } // 处理 HTTP post 请求, 和doGet一样 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } Color getRandColor(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); } }
您还没有登录,请您登录后再发表评论
4. 结算模板:用户在购物车中选择的商品会汇总到结算页面,显示订单总额、优惠券或积分的使用情况、配送地址选择、支付方式选择等。用户确认无误后可提交订单。 5. 用户中心模板:用户可以查看个人信息、订单历史、...
在项目中,源代码部分展示了如何实现爬虫的逻辑,包括URL管理(如使用队列或栈来存储待爬取链接)、反爬策略处理(如模拟用户代理、设置请求间隔、处理验证码等)、以及数据清洗和存储。这部分代码的学习可以帮助...
3. **动态验证机制**:部分网站会通过验证码等方式来识别机器人行为,需要设计相应的解决方案。 为了有效应对上述挑战,可以考虑以下几种方法: - **代理IP池**:构建一个大规模的代理IP池,并根据访问频率和成功...
在Java开发中,邮件服务是一项常见的功能,用于发送通知、验证码、报告等。"Java邮件开发(4)_邮件开发中问题汇总"这篇文章主要探讨了在Web应用中集成邮件发送功能时可能遇到的问题以及解决策略。这里我们将深入讲解...
Java 后端技术面试涉及到众多知识点,以下是针对提供的部分内容的详细解释: 1. **LRU 缓存机制** LRU(Least Recently Used)是一种常见的缓存淘汰策略,其核心思想是最近最少使用的数据会被优先淘汰。在内存有限...
梁净净:完成前端部分学生界面汇总及功能连接 8/8 15:20 柴智:数据库增加了Bctanswer表,增加对应的javabean以及dao包和数据库操作。封装service层,完成对应的servlet。 8/8 15:00 段唯钧:完成教师删除学生...
5. **成绩统计**:系统能进行成绩汇总和分析,帮助教师了解学生的学习情况,为教学改进提供数据支持。 6. **安全机制**:为了防止作弊,系统可能采用IP限制、验证码、时间监控等措施,确保考试公平性。 7. **源...
【IT互联网名企经典面试题汇总:Java篇】 在IT行业,尤其是互联网领域,Java作为一门广泛应用的编程语言,其面试题涵盖了多个方面,包括基础知识、设计模式、框架使用、数据库操作、并发处理、内存管理等。以下是...
ajax验证码 异步刷新源码 新手java 最新 10000+ 道,280多份,面试题,汇总 整理那么辛苦,求个 Star,Fork 谢谢 最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,我连日加班好多天,终于整理好了,...
在Java ME(J2ME)平台上,由于其资源和性能限制,系统并未内置提供gzip压缩功能,这使得在移动设备上进行数据压缩处理时需要额外的技术支持。`gzip`是一种广泛使用的数据压缩算法,通常用于在网络传输中减小数据...
毕业设计,基于SpringBoot+Vue+MySql开发的前后端分离的毕业生追踪系统,内含Java完整源代码,数据库脚本 基于 Vue 和 SpringBoot 的毕业生追踪系统 软件简介 毕业生追踪系统拥有登陆注册模块、学生基本配置模块、...
这个压缩包文件“543742378365910书城项目资料汇总.rar”包含了关于一个网上书城项目开发的详细资料。以下是对这些资源的解析和相关知识点的介绍: 1. **网上书城运行详细步骤.docx**: 这份文档很可能详细记录了...
示例代码中的`main1`方法展示了如何生成不重复的四位数验证码,而`main`方法则演示了如何从XML字符串中截取姓名和性别。 二、日期操作 1. 读取日期:`Calendar.getInstance()`可以获取当前日期,通过`get()`方法...
同时,考虑到性能和安全性,可能还运用了session管理、验证码技术、SQL优化等策略。 7. **学习与实践** 对于初学者,这是一个很好的实践项目,可以帮助理解Java Web开发流程,熟悉数据库设计和JSP编程。通过阅读...
为了进一步保障系统安全,文档提到为该系统增加了MD5加密和验证码等安全技术措施。 ### 3. 系统的技术栈 - **SSH框架**:SSH即Struts、Spring和Hibernate的组合,是一种流行的Java EE应用程序架构,主要用于简化Web...
2009-03-10 11:13 377530 94291 常见的专业问题解决办法\struts验证码 - Struts - Java - JavaEye论坛.mht 2007-10-20 11:27 427008 296205 常见的专业问题解决办法\swing程序设计.doc 2007-12-25 20:21 1504314 ...
4. 问卷结果查看用户可以查看问卷的汇总结果,包括每个问题的答案统计。 5. 问卷复制支持将一个问卷复制到其他班级或校区,减少重复编辑的工作量。 6. 数据安全与验证提供验证码验证和数据过滤功能,防止恶意输入和...
6. **报表生成**:系统能够生成各类报表,如每日交易汇总、月度存款总额、账户活跃度报告等,以便管理层了解业务状况。 7. **安全机制**:为了保障用户资金安全,系统应具备登录验证功能,如用户名和密码输入,可能...
- 安全机制:采用验证码、会话管理等措施防止作弊行为。 3. 数据库设计: - 用户表:存储用户名、密码、角色(学生/教师)等信息,用于权限控制。 - 考试表:记录考试名称、开始时间、结束时间、总分等信息。 -...
5)性别:Choice 6)邮箱输入框和是否公开邮箱:TextField和...同时要求在用户登录时需要输入验证码,其原理为:使用Random产生两个随机数,对其进行加法运算,如果用户输入的数据正确则可以登录,否则无法登录。
相关推荐
4. 结算模板:用户在购物车中选择的商品会汇总到结算页面,显示订单总额、优惠券或积分的使用情况、配送地址选择、支付方式选择等。用户确认无误后可提交订单。 5. 用户中心模板:用户可以查看个人信息、订单历史、...
在项目中,源代码部分展示了如何实现爬虫的逻辑,包括URL管理(如使用队列或栈来存储待爬取链接)、反爬策略处理(如模拟用户代理、设置请求间隔、处理验证码等)、以及数据清洗和存储。这部分代码的学习可以帮助...
3. **动态验证机制**:部分网站会通过验证码等方式来识别机器人行为,需要设计相应的解决方案。 为了有效应对上述挑战,可以考虑以下几种方法: - **代理IP池**:构建一个大规模的代理IP池,并根据访问频率和成功...
在Java开发中,邮件服务是一项常见的功能,用于发送通知、验证码、报告等。"Java邮件开发(4)_邮件开发中问题汇总"这篇文章主要探讨了在Web应用中集成邮件发送功能时可能遇到的问题以及解决策略。这里我们将深入讲解...
Java 后端技术面试涉及到众多知识点,以下是针对提供的部分内容的详细解释: 1. **LRU 缓存机制** LRU(Least Recently Used)是一种常见的缓存淘汰策略,其核心思想是最近最少使用的数据会被优先淘汰。在内存有限...
梁净净:完成前端部分学生界面汇总及功能连接 8/8 15:20 柴智:数据库增加了Bctanswer表,增加对应的javabean以及dao包和数据库操作。封装service层,完成对应的servlet。 8/8 15:00 段唯钧:完成教师删除学生...
5. **成绩统计**:系统能进行成绩汇总和分析,帮助教师了解学生的学习情况,为教学改进提供数据支持。 6. **安全机制**:为了防止作弊,系统可能采用IP限制、验证码、时间监控等措施,确保考试公平性。 7. **源...
【IT互联网名企经典面试题汇总:Java篇】 在IT行业,尤其是互联网领域,Java作为一门广泛应用的编程语言,其面试题涵盖了多个方面,包括基础知识、设计模式、框架使用、数据库操作、并发处理、内存管理等。以下是...
ajax验证码 异步刷新源码 新手java 最新 10000+ 道,280多份,面试题,汇总 整理那么辛苦,求个 Star,Fork 谢谢 最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,我连日加班好多天,终于整理好了,...
在Java ME(J2ME)平台上,由于其资源和性能限制,系统并未内置提供gzip压缩功能,这使得在移动设备上进行数据压缩处理时需要额外的技术支持。`gzip`是一种广泛使用的数据压缩算法,通常用于在网络传输中减小数据...
毕业设计,基于SpringBoot+Vue+MySql开发的前后端分离的毕业生追踪系统,内含Java完整源代码,数据库脚本 基于 Vue 和 SpringBoot 的毕业生追踪系统 软件简介 毕业生追踪系统拥有登陆注册模块、学生基本配置模块、...
这个压缩包文件“543742378365910书城项目资料汇总.rar”包含了关于一个网上书城项目开发的详细资料。以下是对这些资源的解析和相关知识点的介绍: 1. **网上书城运行详细步骤.docx**: 这份文档很可能详细记录了...
示例代码中的`main1`方法展示了如何生成不重复的四位数验证码,而`main`方法则演示了如何从XML字符串中截取姓名和性别。 二、日期操作 1. 读取日期:`Calendar.getInstance()`可以获取当前日期,通过`get()`方法...
同时,考虑到性能和安全性,可能还运用了session管理、验证码技术、SQL优化等策略。 7. **学习与实践** 对于初学者,这是一个很好的实践项目,可以帮助理解Java Web开发流程,熟悉数据库设计和JSP编程。通过阅读...
为了进一步保障系统安全,文档提到为该系统增加了MD5加密和验证码等安全技术措施。 ### 3. 系统的技术栈 - **SSH框架**:SSH即Struts、Spring和Hibernate的组合,是一种流行的Java EE应用程序架构,主要用于简化Web...
2009-03-10 11:13 377530 94291 常见的专业问题解决办法\struts验证码 - Struts - Java - JavaEye论坛.mht 2007-10-20 11:27 427008 296205 常见的专业问题解决办法\swing程序设计.doc 2007-12-25 20:21 1504314 ...
4. 问卷结果查看用户可以查看问卷的汇总结果,包括每个问题的答案统计。 5. 问卷复制支持将一个问卷复制到其他班级或校区,减少重复编辑的工作量。 6. 数据安全与验证提供验证码验证和数据过滤功能,防止恶意输入和...
6. **报表生成**:系统能够生成各类报表,如每日交易汇总、月度存款总额、账户活跃度报告等,以便管理层了解业务状况。 7. **安全机制**:为了保障用户资金安全,系统应具备登录验证功能,如用户名和密码输入,可能...
- 安全机制:采用验证码、会话管理等措施防止作弊行为。 3. 数据库设计: - 用户表:存储用户名、密码、角色(学生/教师)等信息,用于权限控制。 - 考试表:记录考试名称、开始时间、结束时间、总分等信息。 -...
5)性别:Choice 6)邮箱输入框和是否公开邮箱:TextField和...同时要求在用户登录时需要输入验证码,其原理为:使用Random产生两个随机数,对其进行加法运算,如果用户输入的数据正确则可以登录,否则无法登录。