java 验证码

标签: java 验证码 | 发表时间:2012-10-23 12:07 | 作者:
分享到:
出处:http://www.iteye.com

 

package com.ssh;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

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;

 

public class VerifyCode extends HttpServlet {

 

/**

*/

private static final long serialVersionUID = 1L;

 

private int width = 100;

private int height = 40;

private int codeCount = 4;

private int fontHeight = 30;

private int xx = 15;

private String codeStr = "0123456789abcdefghijklmnopqrstuvwxyz";

 

public void init() throws ServletException {

// System.out.println("aaaaaaaaaaaa");

}

 

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, java.io.IOException {

// 定义图像buffer

BufferedImage buffImg = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics2D gd = buffImg.createGraphics();

 

// 将图像填充为白色

gd.setColor(Color.WHITE);

gd.fillRect(0, 0, width, height);

 

// 创建字体,字体的大小应该根据图片的高度来定。

Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);

// 设置字体。

gd.setFont(font);

// 画边框。

gd.setColor(Color.blue);

gd.drawRect(0, 0, width - 1, height - 1);

 

// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。

gd.setColor(Color.gray);

// 创建一个随机数生成器类

Random random = new Random();

for (int i = 0; i < 50; i++) {

int x = random.nextInt(width);

int y = random.nextInt(height);

int xl = random.nextInt(25);

int yl = random.nextInt(25);

gd.drawLine(x, y, x + xl, y + yl);

}

// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。

StringBuffer randomCode = new StringBuffer();

int red = 0, green = 0, blue = 0;

// 随机产生codeCount数字的验证码。

for (int i = 0; i < codeCount; i++) {

// 得到随机产生的验证码数字。

 

String strRand = getRand();

// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

 

// 用随机产生的颜色将验证码绘制到图像中。

gd.setColor(new Color(red, green, blue));

gd.drawString(strRand, (i + 1) * xx, 30);

 

// 将产生的四个随机数组合在一起。

randomCode.append(strRand);

}

// 将四位数字的验证码保存到Session中。

req.getSession().setAttribute("validateCode", randomCode.toString());

// 禁止图像缓存。

resp.setHeader("Pragma", "no-cache");

resp.setHeader("Cache-Control", "no-cache");

resp.setDateHeader("Expires", 0);

resp.setContentType("image/jpeg");

// 将图像输出到Servlet输出流中。

ServletOutputStream sos = resp.getOutputStream();

ImageIO.write(buffImg, "jpeg", sos);

sos.close();

}

 

private String getRand() {

char[] codec = codeStr.toCharArray();

int codeIndex = (int) (codeStr.length() * Math.random());

char s = codec[codeIndex];

return String.valueOf(s);

}

}


 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java 验证码] 推荐:

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.

验证码新趋势:NuCaptcha推出动态验证码

- Mac.Baby - 36氪
曾开发过提供视频验证码服务的加拿大创业公司NuCaptcha刚刚发布了动态验证码,可为网站提供新的安全保证,有望为验证码市场带来新气象. 验证码是人们在网站上最常见的安全问题,只要是上网的人都会遇到被要求辨认和输入数字或者单词的情况. 网站通过验证码来区分人和恶意程序. 而我们所见的大部分的验证码都是基于文字的.

10种用户友好的验证码

- Liang - cnBeta.COM
众所周知,验证码就是帮助我们确定答案不是由电脑自己生成的. 今天我推荐给大家10种用户体验绝佳、令人意想不到的验证码设计风格.

使用 PIL 生成验证码图片

- HarryHan - python.cn(jobs, news)
现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一. 这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码. _letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z.

验证码的现在与未来

- Yishen - 爱范儿 · Beats of Bits
”验证码“( CAPTCHA )其实并不是各位网友总是在不同网站上看到的难以辨认的字母组合的代名词,而是“全自动区分计算机和人类的图灵测试”的俗称,顾名思义,它的作用是区分计算机和人类. 在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答. 这个问题可以由计算机生成并评判,但是必须只有人类才能解答.

response生成图片验证码

- - ITeye博客
服务器对客户端浏览器做出的响应被封装成一个HttpResponse对象. 要对浏览器进行操作,只需要操作HttpRespones对象,通过HttpServletResponse.getWriter()获得PrintWriter,该对象为outputStream的子类.     本例将使用Servlet输出图片验证码.

jsp+servlet实现验证码功能

- - CSDN博客推荐文章
验证码的功能大多数人可能不都理解,但几乎每个安全网站都会有. 验证码是用来防止非人为因素操作的行为,例如一个黑客要黑一个网站,怎么弄呢. 最简单的思路当然是造成其网路拥堵直至系统瘫痪掉. 如果没有验证码,那么我就可以在注册页面,写一个程序,只有注册表单,不断更换主键或不可重复的内容,不停的提交. 那这样每秒可以注册几万次都有可能,这样服务器就大量负载,很容易就瘫痪并死掉.

SimpleCaptcha验证码组件使用

- - 企业架构 - ITeye博客
最近需要做一个验证码信息,在网上找了些验证码组件,选择了SimpleCaptcha组件,java服务器端代码,简单方便使用.       对于此组件里的中文字的验证码,不是很合适,有时候会出现乱码情况,我认为如果想要加入中文字的验证,自己实现匹配就行了.      我这里只做抛砖引玉,贴出主要代码,源码包,SimpleCaptcha组件的源码和DOCS供参考使用(全包超过10mb,不让上传啊).

Servlet实现图形验证码

- - CSDN博客推荐文章
|-- 配置开发图形验证码Servlet. // 设置响应头 Content-type类型. // 以下三句是用于设置页面不缓存. // 建立指定宽、高和BufferedImage对象. Graphics g = image.getGraphics(); // 该画笔画在image上. Color c = g.getColor(); // 保存当前画笔的颜色,用完画笔后要回复现场.

从验证码里挖矿?DoubleRecall 把网络验证码做成广告,加深用户对品牌的印象

- Brant - 36氪
如果问你列举哪些东西能成就一家公司的话,估计你怎么也不会想到说“网站验证码”. 不过这家毕业于YC 的创业公司DoubleRecall 就打算从验证码中挖掘价值. DoubleRecall 为网站提供一套全新的验证码方案. 网站主使用这套方案后,你的验证码就变成了类似上图那样的带有图片的产品简介. 对于用户来说,要跳过这个验证码,你就必须输入高亮的词语,这样用户对品牌的印象度可能要比普通可看可不看的广告深的多.