生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,
服务器端刷新(用history.go(-1)也会变)
原型参考ALIBABA
http://china.alibaba.com/member/showimage产生验证码图片的文件-----image.jsp
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
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);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
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));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生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);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
---------------使用验证码图片的文件---------a.jsp------------------------------------
<%@ page contentType="text/html;charset=gb2312" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>认证码输入页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<form method=post action="check.jsp">
<table>
<tr>
<td align=left>系统产生的认证码:</td>
<td><img border=0 src="image.jsp"></td>
</tr>
<tr>
<td align=left>输入上面的认证码:</td>
<td><input type=text name=rand maxlength=4 value=""></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="提交检测"></td>
</tr>
</form>
</body>
</html>
分享到:
相关推荐
在JSP(JavaServer Pages)中实现验证码,主要是为了确保用户是真实的活生生的人,而不是机器,以此增加网站的安全性。这里我们将深入探讨JSP实现验证码的原理、步骤以及涉及到的相关知识点。 验证码的基本流程包括...
可以使用Java的`Graphics2D`和`Font`类来绘制随机字符串到图像上,同时加入干扰线和噪点提高安全性。 5. **验证用户输入**:当用户输入验证码并提交后,服务器端需要比较用户输入的验证码是否与之前生成的相同。这...
在Java服务器页面(JSP)中实现数字验证码,可以确保用户是真实的个体而非程序。以下是一个简单的JSP数字验证码的实现方法: 首先,我们来看一下JSP的基本结构。`@%>` 和 `是JSP中的脚本元素,它们分别用于执行Java...
### JSP代码实现验证码功能详解 #### 一、概述 本文档详细介绍了如何使用Java Server Pages (JSP)技术来实现一个简单的验证码功能。验证码在Web应用中是一种常见的安全措施,用于防止自动化软件进行恶意操作,如...
本篇文章将详细解析基于JSP实现的图形验证码源码,帮助开发者理解和应用这种安全功能。 首先,我们需要了解JSP(JavaServer Pages)是Java的一种服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,以动态...
### JSP彩色验证码的实现 #### 一、概述 在Web应用中,为了防止恶意登录或自动化工具的攻击,通常会采用验证码技术来确保用户的真实性。验证码(CAPTCHA)是一种区分用户是计算机还是人类的全自动程序,常用于阻止...
在这个场景中,我们将深入探讨如何在JSP中实现验证码的功能。 首先,我们需要理解验证码的基本流程: 1. **生成随机验证码**:这通常通过Java的`Random`类来完成,我们可以生成一组随机的字符或数字,并将其组合成...
为了增加安全性,还可以添加一些干扰线或点。 3. **保存到服务器**:生成的图像需要存储在服务器上,以便在网页上显示。可以将其保存为临时文件,或者直接输出到HTTP响应流中。 4. **保存字符串**:同时,需要将...
本示例将介绍如何利用jsp和net.js来实现验证码验证的功能,无需编写复杂的生成代码。 首先,让我们了解一下net.js。Net.js是一个JavaScript库,它允许在Node.js环境中创建网络服务器,提供了TCP、UDP以及HTTP协议的...
以下我们将深入探讨JSP实现随机验证码的技术细节。 ### 1. 验证码的基本原理 验证码的核心在于生成一组难以被机器自动识别的随机字符或数字,然后将它们显示为图像。用户在提交表单前需要正确输入这组字符,服务器...
首先创建一个`BufferedImage`对象,然后使用`Graphics2D`在其上画出数字,添加背景色、干扰线和噪点,增加验证码的复杂性,防止被机器识别。 ```java BufferedImage image = new BufferedImage(width, height, ...
- **扭曲与噪点**:为了增加识别难度,验证码通常会扭曲数字形状,添加噪点,或者使用干扰线。这些可以通过改变像素位置或颜色来实现。 - **保存图像**:生成的图像需要以二进制流的形式保存到响应中,或者保存到...
### JSP Servlet 验证码实现详解 #### 一、简介 验证码在现代Web应用中是一种常见的安全机制,用于区分用户是人还是自动化程序。在Java Web开发领域中,经常利用JSP(JavaServer Pages)与Servlet技术来实现验证码...
4. **绘制干扰线**:为了使机器更难识别验证码,我们还可以在图片上绘制一些随机的线条。同样使用`Graphics2D`对象的`drawLine`方法,随机生成起点和终点,绘制多条线条。 5. **绘制验证码文本**:将之前生成的随机...
3. **扭曲和干扰线**:进一步混淆验证码,我们可以在图像上添加扭曲效果和随机线条,这可以通过改变像素位置或在画布上绘制额外的几何形状实现。 4. **session存储**:生成的验证码值需要存储以便后续验证。在JSP中...
可以使用Java的`Graphics2D`类来绘制文本、干扰线和噪点,增加识别难度,防止被机器轻易识别。 3. **存储验证码**:生成的验证码需要存储起来以便后续验证。在JSP中,通常将验证码存入HttpSession对象中,关联用户...
- **安全性**:该验证码生成方式通过随机生成字符和加入干扰线提高了安全性,使得自动化工具难以识别。 - **可维护性**:代码结构清晰,易于修改和扩展。例如可以通过调整字符集、图片尺寸等参数来自定义验证码的...
下面将详细介绍JSP验证码的实现原理、步骤以及相关的知识点。 **验证码的基本原理** 验证码的核心是生成一串随机字符串,然后将其展示给用户,用户输入看到的字符串,服务器端验证输入是否正确。验证码设计的目标...
在Web开发中,基于JSP(Java Server Pages)的验证码生成系统是常见的实现方式。本文将详细讨论如何使用Java编程语言和JSP技术来创建一个动态验证码生成系统。 首先,我们需要了解JSP的基本概念。JSP是Java的一种...
### JSP验证码生成 #### 1. 基本概念 验证码是一种防止自动化软件攻击的安全机制,常用于用户登录、表单提交等场景。JSP(Java Server Pages)是一种基于Java的技术,用于创建动态网页。在JSP中生成验证码通常涉及...