以下为在Servlet中实现四位数字验证码的源码分析。
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
/*
* 功能:调用AuthCodeServlet可以生成一个4位数字的验证码图片,验证码的图片宽度和高度可以通过配置文件进行定义
* 验证码调用格式为: /servlet/AuthCodeServlet?w=78&h=32
* 或者使用默认长宽/servlet/AuthCodeServlet
*/
public class AuthCodeServlet extends HttpServlet {
// 处理post
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
doGet(req,res);
}
//设置字体
private Font mFont=new Font("Times New Roman", Font.PLAIN,16);
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
HttpSession session=request.getSession();
response.setContentType("image/gif");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int width=70; //验证码默认长度
int height=24; //验证码默认宽度
if(request.getParameter("w")!=null && !request.getParameter("w").equals(""))
width = Integer.parseInt(request.getParameter("w"));
if(request.getParameter("h")!=null && !request.getParameter("h").equals(""))
height = Integer.parseInt(request.getParameter("h"));
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(260,210)); //设置验证码的图片背景色
gra.fillRect(0,0,width,height);
gra.setColor(Color.BLUE); //设置字体色为蓝色
gra.setFont(mFont); //设置定义的字体格式
// 随机产生254条干扰直线,使图象中的验证码不易被解析程序分析到
gra.setColor(getRandColor(110,240));
for (int i=0;i<254;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(63);
int yl = random.nextInt(64);
gra.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的验证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(353));
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);
}
session.setAttribute("authCode",sRand);
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
}
static Color getRandColor(int ff,int cc){
//给定范围获得随机颜色
Random random = new Random();
if(fc>255) ff=255;
if(bc>255) cc=255;
int r=ff+random.nextInt(cc-ff);
int g=ff+random.nextInt(cc-ff);
int b=ff+random.nextInt(cc-ff);
return new Color(r,g,b);
}
static public String getAuthCode(HttpSession session){
//返回验证码
return (String)session.getAttribute("AuthCode");
}
}
分享到:
相关推荐
在这个例子中,我们将探讨两种类型的验证码:纯四位数字验证码和混合大小写字母与数字的验证码。 首先,验证码的生成原理主要包含以下几个步骤: 1. **随机数生成**:验证码的核心是生成一组随机数。对于纯数字...
本教程将详细解释如何使用Servlet技术来实现一个动态的验证码功能,包括点击验证码后更换新的验证码以及验证码的验证过程。 一、Servlet基础 Servlet是Java EE中用于处理HTTP请求的服务器端组件。它接收客户端...
本篇文章将深入探讨如何使用Servlet技术来实现图形验证码的生成与验证。 首先,我们需要了解Servlet。Servlet是Java EE中的一部分,它是一个服务器端的Java应用程序,主要用于处理HTTP请求。在图形验证码的实现中,...
// 随机生成四位数字的验证码 private String getRandomString(HttpServletRequest request) { int ranNum = (int) (Math.random() * 9000) + 1000; request.getSession().setAttribute("ranNum", ranNum + "");...
它首先获取一个随机的四位数字验证码,然后将这个验证码存储在用户的会话(`HttpSession`)中。这样,当用户提交表单时,服务器可以检查提交的验证码与会话中存储的验证码是否匹配,从而验证用户的身份。 在生成...
随机生成四位数验证码,包括汉字,数字,英文大小写。 1.Servlet类 package servlet; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt....
接着生成四位数字作为验证码,并为每个字符设置随机颜色,增强识别难度。 ```java StringBuffer randomcode = new StringBuffer(); int red = 0, green = 0, blue = 0; for (int i = 0; i ; i++) { String ...
2. 生成验证码:后台程序生成一个随机的4位或6位数字验证码,存储到服务器端(例如内存或数据库),同时设置一个过期时间,比如5分钟。 3. 发送短信:通过调用短信服务商的API,将验证码和用户的手机号一起发送到...
在这个案例中,验证码是四位长度,包含字母和数字,这样可以提供足够的组合可能性,同时又不会过于复杂,易于用户识别。 2. **图形化展示**:生成的验证码字符串需要转换为图像显示给用户,这样可以避免被简单的...
通常,当用户在应用或网站上进行敏感操作时,系统会向用户注册的手机号发送一个随机生成的四位或六位数字验证码。用户在规定时间内输入这个验证码,系统验证正确后才会执行相应操作。这个过程涉及以下几个关键步骤:...
本示例中的代码展示了如何通过JSP和Servlet生成一个简单的四位数字验证码。以下是具体的知识点解析: 1. **Servlet基础**: Servlet是Java Web应用程序中的服务器端组件,用于处理HTTP请求并生成响应。`...
本文将详细介绍如何利用Java编写一个能够随机生成四位数字验证码的功能,并将其存储在`session`中,以便于后续验证使用。此外,我们还将探讨如何通过Servlet来生成验证码图片并展示在前端。 #### 二、核心功能实现 ...
定义图片的width、定义图片的height、定义图片上显示验证码的个数 创建字体,字体的大小应该根据图片的高度来定 产生随机的颜色分量来构造颜色值,这样...四位数字的验证码保存到Session中 将图像输出到Servlet输出流中
生成的字符串通常包含字母、数字,甚至符号,长度一般为4-6位。然后,这个字符串可以转换为图像,通过Java的Graphics2D类库绘制到BufferedImage对象上,增加扭曲、模糊、噪声等效果,增加机器识别难度。 2. **保存...
上述代码创建了一个简单的基于字母的四位验证码,同时添加了背景噪声以增加识别难度。验证码字符串被保存在用户的会话(session)中,以便后续的验证步骤。 在实际应用中,用户在看到验证码后需要手动输入,然后...
- 生成一个4位数字的字符串作为验证码。 - 使用不同的颜色绘制每个字符,增加视觉上的差异性。 - 文字的位置经过计算,确保在图片中的位置合理。 5. **保存验证码到Session**: - 将生成的验证码字符串保存到`...
1. **验证码生成器**:这个类负责创建随机的验证码字符串,通常由四个到六位数字或字母组成。生成器可能还包含了绘制验证码图像的功能,图像上通常会包含扭曲、噪声线等干扰元素,以增加机器识别的难度。 2. **...
在这个例子中,验证码是四位随机数字。以下是关键步骤的详解: 1. **定义颜色生成函数**:`getRandColor(int fc, int bc)` 用于生成介于 `fc` 和 `bc` 之间的随机颜色。这有助于创建不同背景和文字颜色,增加验证码...
- 生成四位数字的随机验证码,并存储到`HttpSession`中。 - 创建一个100x40像素的缓冲图像对象,使用`java.awt`中的类绘制背景、文字和随机线条。 - 将生成的图像输出到客户端。 #### 其他相关知识点 **Java EE...