- 浏览: 299373 次
文章分类
最新评论
-
流年末年:
那四个参数还是没看懂.....能不能解释下showPassst ...
我写的密码强度验证方法(原创) -
kingcs2008:
// 验证pws.jsshowPassstrength(&qu ...
我写的密码强度验证方法(原创) -
h957355152:
请问博主这个怎么用呢?我直接放到jsp里面调用showPass ...
我写的密码强度验证方法(原创) -
qq_15138059:
我写的全国省市县三级联动菜单,拿出来和大家分享了(原创) -
valenon:
评论呢?从MAIL FROM命令开始貌似就出错了:500 Er ...
如何发送伪造的电子邮件
web.xml
servlet类文件
在我的机器上,这个程序每秒钟可以产生大约83张验证码。验证码图样如下
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <!-- ******************************************** --> <!-- **********验证码生成器************************** --> <!-- ******************************************** --> <servlet> <servlet-name>CaptchaServlet</servlet-name> <servlet-class>com.lowca.activity.web.servlet.CaptchaServlet</servlet-class> <init-param> <param-name>width</param-name> <param-value>150</param-value> </init-param> <init-param> <param-name>height</param-name> <param-value>100</param-value> </init-param> <init-param> <param-name>bgColor</param-name> <param-value>255,255,255</param-value> </init-param> <init-param> <param-name>fontColor</param-name> <param-value>0,255,0</param-value> </init-param> <init-param> <param-name>fontSize</param-name> <param-value>44</param-value> </init-param> <init-param> <param-name>fontCount</param-name> <param-value>4</param-value> </init-param> <init-param> <param-name>fontName</param-name> <param-value>宋体</param-value> </init-param> <init-param> <param-name>chars</param-name> <!-- 去掉了容易造成误解的字符,例如:i o z 和 1 0 2 --> <param-value>ABCDEFGHJKLMNPQRSTUVWXYabcdefghjkmnpqrstuvwxy3456789</param-value> </init-param> <init-param> <param-name>sessionKey</param-name> <param-value>com.lowca.activity.captcha</param-value> </init-param> <init-param> <param-name>maxRotateAngle</param-name> <param-value>40</param-value> </init-param> <init-param> <param-name>fontPadding</param-name> <param-value>-15</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>CaptchaServlet</servlet-name> <url-pattern>/captcha.jpg</url-pattern> </servlet-mapping> </web-app>
servlet类文件
package com.lowca.activity.web.servlet; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.IOException; 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; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; public class CaptchaServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String CONTENT_TYPE = "image/jpeg"; // ==================以下变量用于保存配置参数的默认值 ================== /** * 验证码的宽度 */ private int width = 200; /** * 验证码的高度 */ private int height = 150; /** * 验证码背景色 */ private Color bgColor = Color.WHITE; /** * 文字颜色 */ private Color fontColor = Color.GREEN; /** * 验证码字符字号 */ private int fontSize = 42; /** * 验证码字符个数 */ private int fontCount = 4; /** * 验证码字符间距,单位是像素 */ private int fontPadding = -15; /** * 验证码字符最大旋转角度 */ private int maxRotateAngle = 40; /** * 验证码字体 */ private String fontName = "宋体"; /** * 验证码用到的字符 */ private String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; /** * 验证码在session中的键名 */ private String sessionKey = "com.lowca.activity.captcha"; // ==================以下变量用于在初始化时候保存数据,减少重复计算 ================== private Font font; private char[] seedArray; private int offsetX = 0; private int offsetY = 0; /** * 生成由数字和字母随机组成的图片 */ protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = buffImg.createGraphics(); g2d.setColor(bgColor); g2d.fillRect(0, 0, width, height); g2d.setPaint(fontColor); g2d.setFont(font); // 旋转文本 StringBuffer randCode = new StringBuffer(); for (int i = 0; i < fontCount; i++) { g2d.setStroke(new BasicStroke((float) (Math.random() * 5))); double angle = Math.random() * maxRotateAngle * Math.PI / 180; int p = (int) (Math.random() * chars.length()); String word = String.valueOf(seedArray[p]); randCode.append(word); int x = offsetX + i * (fontSize + fontPadding); AffineTransform origXform = g2d.getTransform(); AffineTransform newXform = (AffineTransform) (origXform.clone()); newXform.rotate(angle, x, offsetY); g2d.setTransform(newXform); g2d.drawString(word, x, offsetY); g2d.setTransform(origXform); } g2d.setStroke(new BasicStroke(2.0f)); int x = offsetX - (int) (20 * Math.random()); int y = offsetY - (int) (20 * Math.random()); int w = (int) (width - 10 - Math.random() * 6); int h = (int) (height - 10 - Math.random() * 6); int startAngle = (int) (Math.random() * 16 + 45); int arcAngle = (int) (Math.random() * 45 + 90); g2d.drawArc(x, y, w, h, startAngle, arcAngle); g2d.dispose(); // 将四位数字的验证码保存到Session里面 HttpSession session = req.getSession(); session.setAttribute(sessionKey, randCode); // 禁止图像缓存 resp.setHeader("Prama", "no-cache"); resp.setHeader("Coche-Control", "no-cache"); resp.setDateHeader("Expires", 0); // 将图像输出到Servelt输出流中 ServletOutputStream out = resp.getOutputStream(); ImageIO.write(buffImg, "jpeg", out); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); } public void init() throws ServletException { // 初始化配置参数 String param = getInitParameter("width"); if (NumberUtils.isDigits(param)) { width = Integer.parseInt(param); } param = getInitParameter("height"); if (NumberUtils.isDigits(param)) { height = Integer.parseInt(param); } param = getInitParameter("bgColor"); if (param != null && param.matches("^\\d+,\\d+,\\d+$")) { bgColor = getColor(param); } param = getInitParameter("fontColor"); if (param != null && param.matches("^\\d+,\\d+,\\d+$")) { fontColor = getColor(param); } param = getInitParameter("fontSize"); if (NumberUtils.isDigits(param)) { fontSize = Integer.parseInt(param); } param = getInitParameter("maxRotateAngle"); if (NumberUtils.isDigits(param)) { maxRotateAngle = Integer.parseInt(param); } param = getInitParameter("fontPadding"); if (param != null && param.matches("-?\\d+")) { fontPadding = Integer.parseInt(param); } param = getInitParameter("fontName"); if (StringUtils.isNotBlank(param)) { fontName = param; } param = getInitParameter("chars"); if (StringUtils.isNotBlank(param)) { chars = param; } param = getInitParameter("sessionKey"); if (StringUtils.isNotBlank(sessionKey)) { sessionKey = param; } // 初始化状态变量 font = new Font(fontName, Font.ITALIC, fontSize); seedArray = chars.toCharArray(); offsetX = width / 2 - fontCount * fontSize / 2 - (fontCount - 1) * fontPadding / 2 - 8; offsetY = height / 2 + fontSize / 2 - 8; } private Color getColor(String rgb) { String[] array = rgb.split(","); return new Color(Integer.parseInt(array[0]), Integer.parseInt(array[1]), Integer.parseInt(array[2])); } }
在我的机器上,这个程序每秒钟可以产生大约83张验证码。验证码图样如下
发表评论
-
java正则表达式高级用法:转换驼峰标示
2012-06-26 16:47 5749String source = "LastLog ... -
你会做Web上的用户登录功能吗?(转)
2012-06-25 13:22 1321Web上的用户登录功能应 ... -
使用pager-taglib.jar实现的分页技术
2012-06-24 02:34 875//1.导入pager-taglib.jar包; / ... -
如何在myeclipse中使用maven?
2012-06-11 14:22 168041.下载maven,解压到D盘ma ... -
安装subclipse, MyEclipse8 SVN插件
2012-06-09 22:39 908安装subclipse, MyEclipse8 SVN插件 ... -
PDF生成器
2012-05-28 02:53 817我自己写的一个pdf生成器,能导出百度博客为PDF -
我的自动投票器
2012-04-17 13:58 1264自动投票器,支持windows的32位机器 下面的压缩包是编 ... -
list,set,map,数组间的相互转换(转载)
2012-03-16 16:29 28191.list转set Java代码 ... -
一个给pojo生成hashcode、equals、toString等方法的工具类
2012-03-06 09:52 4218一个给pojo生成hashcode、equals、toStri ... -
ehcache的用法
2012-02-13 22:13 0Spring ... -
使用ehcache来缓存页面
2012-02-13 22:08 767关于缓存的话题,在坛子里已经有很多讨论,简单的来说,如果一个应 ... -
java笔记:自己动手写javaEE框架(二)--业务层Service以及Service单元测试
2012-02-13 00:55 0前一篇博文里有三 ... -
struts+spring+hibernate的web应用<四> Web层代码编写(2)
2012-02-13 00:50 0接着就是写资源文件了。 在 com.game. ... -
struts+spring+hibernate的web应用<四> Web层代码编写(1)
2012-02-13 00:49 1006前面的文章: ... -
struts+spring+hibernate的web应用<三> Service层代码编写
2012-02-13 00:46 822前面的文章: ... -
struts+spring+hibernate的web应用<二> Dao层代码编写
2012-02-13 00:45 828前一篇文章 (struts+spring ... -
struts+spring+hibernate的web应用<一> 架构搭建
2012-02-13 00:44 746许久没有些文章了,现 ... -
ehcache缓存管理
2012-02-12 23:52 946EHCache 是一个纯java的,在Hibernate2 ... -
检测一个字符串是否在jvm的常量池中(原创)
2012-01-11 09:07 2118检测一个字符串是否在jvm的常量池中 public ... -
我写的密码强度验证方法(原创)
2011-12-18 15:26 8318/* *说明: * 该方法主要分析密码的内容构成 ...
相关推荐
验证码生成识别工具识别,可用于密码爆破或者破解邮箱密码或者,也可快速多帐
网页旋转验证码识别 Python
简单轻巧的验证码生成工具类。
易语言简单验证码生成和识别源码,简单验证码生成和识别,生成随机验证码,比对文本子程序
本实例将介绍生成英文和数字混合的验证码。运行程序,在页面中将显示英文和数字混合的验证码,用户只有输入正确的验证码后,才可以完成登录。如果当前生成的验证码不容易辨认,也可以单击“看不清?换一个”超链接...
验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类验证码生成类
vb 自身验证码生成图片并识别 源代码
本程序是采用Windows GDI+技术模拟Web上的验证码生成而设计的一款Windows版验证码随机生成程序,利用GDI+图形图像处理技术,可随机生成强验证码(即汉字验证码)或弱验证码(即数字和字母组合验证码),支持验证码的...
验证码生成类大全
一直想写验证码识别,但苦于没有足够的训练数据。 之前数据样本都是让我同学手动帮填的,效率极低而且还有错误率,后来想起找源码不是更方便吗。 便通过反编译zjdx.dll写下了批量生成验证码的软件。 顺便吐槽下正方...
提供正方系统验证码大量样本数据,方便开发者编写验证码识别。 注:请在window平台生成验证码!
识别网页旋转验证码
易语言论坛验证码识别.rar 易语言论坛验证码识别.rar 易语言论坛验证码识别.rar 易语言论坛验证码识别.rar 易语言论坛验证码识别.rar 易语言论坛验证码识别.rar 易语言论坛验证码识别.rar 易语言论坛验证码识别.rar ...
通过OpenCV实现的全自动图形图片验证码识别软件,可以识别出绝大多数验证码,操作简单方便。
图片验证码生成demo
采用从网上下载的抗AI识别的图片,随机选择图片的方案。 应用例子PHP代码: 1. 代码包括以下内容: log_aux.php 共用例子代码。可以用在别的工程中 log_demo.html 登录例子的主页面 log_demo.php 登录后台处理的...
C# 验证码生成与识别 网上的算法 简单的 可以参考
用java写的自动生成验证码图片,和验证,用的servlet技术
获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是...
tensorflow实现验证码生成与识别,深度学习的实际应用