`
flashdream8
  • 浏览: 680508 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 验证码

 
阅读更多

 

验证码: jsp 

 

1. 数字型:

 

<%@ page language="java" contentType="image/png"
	import="java.util.*,java.awt.*,java.awt.image.*" pageEncoding="GBK"%>
<%
	out.clear();	
//在内存中创建图象  
int width = 85, 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));  

// 随机产生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);  
}  

// 取随机产生的认证码(6位数字)  
String sRand = "";  
for (int i = 0; i < 6; 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);
//ActionContext.getContext().getSession().put("rand", sRand);  

// 图象生效  
g.dispose();  
out.clearBuffer();// 清空缓冲区
javax.imageio.ImageIO.write(image, "png", response.getOutputStream());// 把内存的图片编码到输出流, 参数依次为: 图片对象, 格式(png,jpg), 输出流
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
%>
<%!
/* 
 * 给定范围获得随机颜色 
 */  
private 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);  
}  
%>

 

2. 字母型

<%@ page language="java" contentType="image/png"
	import="java.util.*,java.awt.*,java.awt.image.*" pageEncoding="GBK"%>
<%!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("Expires", "Sat, 6 May 1995 12:00:00 GMT");

// 设置 HTTP/1.1 no-cache 头
response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate");

// 设置 IE 扩展 HTTP/1.1 no-cache headers, 用户自己添加
response.addHeader("Cache-Control", "post-check=0, pre-check=0");

// 设置标准 HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");

	out.clear();	
	//response.reset();// 清空以前缓冲区
	//生成随机类
	Random random = new Random();
	BufferedImage img = new BufferedImage(60, 20,
			BufferedImage.TYPE_INT_RGB);// 创建彩色缓冲图, 宽 60, 高 20

	Graphics g = img.getGraphics();// 画笔对象

	// 填充白色的背景
	g.setColor(Color.white);
	g.fillRect(0, 0, 100, 20);

	//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
	g.setColor(getRandColor(160, 200));
	
	for (int i = 0; i < 155; i++) {
		int x = random.nextInt(100);
		int y = random.nextInt(20);
		int xl = random.nextInt(12);
		int yl = random.nextInt(12);
		g.drawLine(x, y, x + xl, y + yl);
	}

	// 绘制蓝色文字
	g.setColor(Color.blue);

	// 生成 4 位随机数字验证码并存入session, 然后输出到图片中
	
	String code = "";
	
	for(int i = 0; i < 4; i++) {
		Random rand = new Random();
		//code += rand.nextInt(10) + ""; // 随机数字
		code += (char) ( rand.nextInt(26) + 'A') ; // 随机字母
	}

	session.setAttribute("regcode", code);// 存放值名字为 regcode

	//设定字体
	g.setFont(new Font("Times New Roman", Font.PLAIN, 20));

	g.drawString(code, 2, 16);

	g.dispose();// 关闭对象, 释放内存, 刷新到图形对象

	out.clearBuffer();// 清空缓冲区
	javax.imageio.ImageIO.write(img, "png", response.getOutputStream());// 把内存的图片编码到输出流, 参数依次为: 图片对象, 格式(png,jpg), 输出流
	out.flush(); // 输出全部内容, 防止 Tomcat 后台报 Socket 错误, IE 6 下会出现问题
	//out.close();// 关闭, 防止后台无法写入数据
%>
 

 

3. 调用 该jsp 输出验证码

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript">
	//载入新的验证码
	function loadNewCode() {
		document.getElementById('regcodeImg').src = '${basePath }test.jsp?d=' + new Date().getTime();
	}
	</script>
  </head>
  
  <body>
   <img src="${basePath }test.jsp?TTT=<%=Math.random()*100 %>" width="58" height="20"  style="CURSOR: pointer" id=regcodeImg title=看不清楚?点击换一张 onclick=loadNewCode();  >
  </body>
</html>
 

 

分享到:
评论

相关推荐

    java 验证码工具类 java 验证码工具类 java 验证码工具类

    java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java ...

    Java验证码实现源码

    要实现一个简单的Java验证码,我们需要以下步骤: 1. **生成随机字符串**:首先,我们需要生成一个随机的字符串,这可以通过Java的`Random`类和`StringBuilder`类配合实现。可以设置字符串的长度和包含的字符集(如...

    java验证码的源码

    Java验证码是一种常用的安全机制,用于防止自动化的机器人或者恶意脚本对网站进行非法操作,比如批量注册、恶意登录等。验证码通常由随机生成的一串字符或数字组成,用户需要正确输入才能完成相应的操作。在Java中...

    java验证码识别

    Java验证码识别技术主要涉及到图像处理和光学字符识别(OCR)两个关键领域,是自动化系统中用于防止机器人自动操作的一种安全机制。在这个Java项目中,我们看到的文件名可能与训练模型、输入图像和识别结果有关。...

    Java验证码框架.

    Java验证码框架.可实现多种验证很强大

    java 验证码识别源程序

    这个Java验证码识别源程序针对的是Windows操作系统,并且据描述声称其识别准确率超过90%,这意味着它具有较高的实用价值。接下来,我们将深入探讨验证码识别的基本原理、相关技术以及如何在Java中实现。 验证码...

    纯Java验证码工具类

    "纯Java验证码工具类" 提供了一种简便的方法来生成这种安全机制,无需依赖其他语言或库。这个工具类可以被轻松地集成到任何Java项目中,为你的应用程序添加一道防线。 验证码生成通常包括以下几个关键步骤: 1. **...

    java 验证码失效异常类

    java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码失效异常类java 验证码...

    java验证码

    Java验证码是一种常用的安全机制,主要用于防止自动化的机器人或者恶意脚本进行非法操作,例如注册、登录、提交表单等。在Web开发中,Java验证码的实现通常涉及到图像生成、随机字符生成、以及客户端与服务器之间的...

    JAVA验证码原理及实现

    本文将深入探讨JAVA验证码的原理及其实现方法。 验证码的生成主要分为以下几个步骤: 1. **随机字符串生成**:首先,我们需要生成一组随机的字符串。这通常由字母、数字或特殊字符组成,长度可以在4到6个字符之间...

    java验证码组件Jcaptcha

    Java验证码组件Jcaptcha是用于生成安全、动态的图像验证码的工具,主要目的是为了防止自动化的机器人或恶意软件在Web应用程序中进行非法操作,如批量注册、登录等。它通过生成随机字符组合并扭曲图像背景来增加人眼...

    Java验证码

    Java验证码是一种广泛应用于Web开发中的安全机制,主要目的是防止恶意自动化程序(如机器人或爬虫)对网站进行非法操作,例如频繁提交表单、刷票等。在Java中实现验证码通常涉及图像处理、随机数生成以及哈希算法等...

    Java验证码的实现

    总的来说,Java验证码的实现涉及到Java图形处理、Web编程以及安全策略等多个方面的知识,是Java Web开发中一个实用且重要的技能。通过实践,你可以更好地理解和掌握这些技术,并能根据实际需求进行扩展和优化。

    java验证码生成类

    这篇博客文章“java验证码生成类”提供了一个简单的示例,下面我们将深入探讨验证码生成的相关知识点。 首先,验证码的基本原理是生成一段随机的、难以由机器识别的文字或数字序列,然后要求用户在限定时间内输入这...

    比较常见的Java验证码(解压导入MyEclipse即可)

    通过深入研究这个示例,你不仅可以掌握Java验证码的生成,还能了解到图形处理、会话管理等相关知识,对于提升自己的Java Web开发技能大有裨益。同时,这也是一个很好的实践项目,可以帮助你理解理论知识在实际应用中...

    java验证码识别源码

    在本Java验证码识别源码中,我们将会探讨如何利用编程技术来识别和解析这些图形验证码。 首先,验证码识别通常涉及图像处理和机器学习两大部分。图像处理用于预处理图片,提取特征;机器学习则用于训练模型,识别...

    java验证码及刷新

    总的来说,"java验证码及刷新"项目是一个基础但实用的Web开发实践,它展示了如何利用Java技术来实现验证码的生成与刷新功能,对于理解和掌握Java Web开发有很好的学习价值。通过这样的实践,开发者可以更好地理解JSP...

    70.java验证码生成.zip

    70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java...

    Java验证码生成库 JCaptcha

    Java验证码生成库 JCaptcha

Global site tag (gtag.js) - Google Analytics