现在学习struts2,根据网上的资料通过struts2来做了一个验证码,资料都是很久的了,自己学习逻辑和思维方式。
有人推荐kaptcha插件制作验证码,没有尝试过呢,听说很强大,下一步试一试,现在贴出我自己的代码。
html页面:
<div id="jpeg" >
<span>这个是我自己做的验证码:</span>
<img src="myimage.action" alt="验证码" style="border: 1px;"/>
</div>
struts2 Action:
package com.sanqing.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MyImage extends ActionSupport {
public String execute() throws Exception {
HttpServletResponse httpServletResponse = ServletActionContext.getResponse();
httpServletResponse.setContentType("image/jpeg");
//设置页面不缓存
httpServletResponse.setHeader("Pragma", "No-cache");
httpServletResponse.setHeader("Cache-Control", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
//在内存中创建图像,就像一个带画笔的画布
int width=60,height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图形上下文,就像获得画笔
Graphics2D g=image.createGraphics();
//设置画笔颜色,背景颜色浅点
g.setColor(getRandColor(200,250));
//在画布上画一个矩形,把整个画布都覆盖住
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
Random random=new Random();
for(int i=0;i<100;i++){//一百条干扰线
int sx=random.nextInt(width);
int sy=random.nextInt(height);
int ex=random.nextInt(10);
int ey=random.nextInt(10);
if(i%25==0){
g.setColor(getRandColor(150+i/5,220));
}
//画线
g.drawLine(sx, sy, ex, ey);
}
//获得验证码
StringBuffer ransb=new StringBuffer();
char[] ranChar="ABCDEFG23HGKLMN4567PQRST89UVWXYZ".toCharArray();
int len=ranChar.length;
Random rand=new Random();
for(int i=0;i<4;i++){
String temchar=String.valueOf(ranChar[rand.nextInt(len)]);
ransb.append(temchar);
g.setColor(getRandColor(30,250));
g.drawString(temchar, 13 * i + 6, 16);
}
// 图象生效
g.dispose();
OutputStream out=httpServletResponse.getOutputStream();
//jsp页面中可以这么写,就不会报IllegalStateException错误。
//ImageIO.write(image, "JPEG", response.getOutputStream());
// output.flush();
// out.clear();
// out = pageContext.pushBody();
/***
* 给定范围获得随机颜色
* @param fc 起始范围
* @param bc 结束范围
* @return 颜色对象
*/
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);
}
}
分享到:
相关推荐
比较差的啦 不过对新手还可以了 大家自己看看啦 我也是新手啊
android 自定义view学习(随机验证码生成)。我的博客地址:http://blog.csdn.net/qq_16064871。
继续教育网教师远程学习挂机助手201303(验证码版本)
易语言点选验证码学习源码,源码是易语言点选验证码的例子,并且演示了次世代验证码识别的用法。@小R软件。
参加过四川省中小学教师继续教育网远程培训学习的教师都知道:在学习完十至二十分钟之后必须点击“更新学习时间”按钮才会计时,有的还要输入验证码才能更新学习时间。这样每隔十几分钟点一次很是烦人,所以本人编写...
VB制作验证码 研究 学习 VB VB制作验证码 研究 学习 VB VB制作验证码 研究 学习 VB VB制作验证码 研究 学习 VB VB制作验证码 研究 学习 VB
这是我自己编写的一个验证码识别程序,对于简单的验证码识别率高达99%。复杂的验证码也是由此演化而来的,只要仔细阅读代码,找到窍门。然后再查阅一些图像学方面的资料。相信市面上绝大部分的验证码你都能做出识别...
该资源为小编原创的使用Python生成随机验证码的源文件,可供学习制作python验证码的小伙伴们下载
400张豆瓣网站登录、发帖验证码,供识别验证码学习之用。
unity c#,实现手机号短信验证码登录注册功能,文中已写好代码,可直接替换自己的id和密钥后直接使用,注册地址在文中,内容包含,第三方短信验证码平台的接口代码,已写好,具体验证码调用接口代码,已写好,直接...
简单的验证码 简单的验证码 我也是刚学习的。
收集到一个经典的破解验证码源码,供大家学习!
项目进行登录,输入用户和密码时候下方接着输入验证码,更好的保护账号和密码的安全性,上传的资源是完整的示例,实现了验证码图片产生和提交验证码是否正确,方便大家交流学习。
JSP验证码大全之中文验证码(源码),很好的jsp学习源码验证示例!
最近做到一个东西需要用到短信验证码,使用的是一款叫云之讯的短信验证码的API&SDK接口。
网上有很多验证码的相关源码,个人感觉用起来非常的不好,最近有时间就重新整理了一下,把汉字验证码,和数字字母验证进行了整合,用起来还算方便,也可以用于学习里面是C# 和VB.net两中源码!
基于深度学习字符型图片数字验证码识别完整过程及Python实现(深度学习学习、实现数字、字符模型训练、详细介绍附源码) 基于深度学习字符型图片数字验证码识别完整过程及Python实现(深度学习学习、实现数字、字符...
java web登录验证码实现,分享,共勉学习。
易语言点选验证码学习源码,源码是易语言点选验证码的例子,并且演示了次世代验证码识别的用法。
批量验证码 可用于验证码解析实验 用机器学习的KNN和HMM进行学习计算