- 浏览: 350607 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
-
u012049463:
有所帮助,谢谢
FindBugs插件的安装与使用 -
lijunwyf41:
如果是windows系统应该怎么修改?
java.lang.ClassFormatError: Illegal class name "[L[Ljava/lang/String;;" in clas -
riverphoenix:
不错,写的很详尽
FindBugs插件的安装与使用 -
hw1287789687:
ClientAbortException: java.net ...
Connection reset by peer: socket write error -
ssy341:
谢谢分享,顺便问下,如果是web项目,那个服务怎么启动呢?有什 ...
oracle调用java 使用socket监听端口测试
唉 很辛苦啊 花费了我 一下午的时间 来写图片验证码,总算是小有功效 。
嘿嘿 废话少说,先看效果!
嗯 整体感觉 还不错 嘿嘿 。(当然这是其中一张而已,由于背景色都是随机生成的,所有漂亮方面嘿嘿 自己选择咯 要死感觉那种好看 直接就把程序中的颜色写死 好了 嘿嘿 ) 不多少 贴代码 为了 进一步锻炼我的 编码规范 尽量不要出现荣冗余的代码 尽量把代码 写的美观一点 嘿嘿 下面就晒一下我的 代码咯 希望大家 一起讨论进步哈 ,有不对的地方 可以还请指教!谢谢!
package com.dk.util;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class ValidateCode {
/**
* @see 图片验证码提供类
* @author 邓葵 QQ:467529125 <E-mail:467529125@qq.com>
* @param 属性说明:
* @param imageBuffer 生成图片对象
* @param fontSize 图片码字体大小 初始化参数为:35
* @param positionStr1 第一个位置的字符
* @param positionStr2 第二个位置的字符
* @param positionStr3 第三个位置的字符
* @param positionStr4 第四个位置的字符
* @param imageStr 图片上的字符
* @param imageWidth 图片初始化宽度 初始化宽度为:200
* @param imageHeight 图片初始化高度 初始化高度为:50
* @param random 产生随机数机器
* @param String[] collectStr 所有字符产生集合
* @param Graphics2D g 绘图对象
* @param fontType 图片码字体类型 初始化参数为:微软雅黑
* @param imageFilePath 验证码输出路径
* @param
* @param
* @param 方法说明:
* @param Color getColor(); 产生一个随机背景色
* @param Color reverseColor(Color c) 产生一个随机背景色的反色(即设置为图片字体颜色)
* @param methodForGetImageStr() 获得从String字符集合中产生的4个字符
* @param methodForDrawImagePic() 使用绘图对象Grahics2D g对象绘制验证码图形
* @param methodForOutPutImageToClient() 将图片输出到客户端
* @param ValidateCode() 图片验证码生成入口
* @param
*/
private BufferedImage imageBuffer = null; /*生成图片对象*/
private int fontSize = 35; /*图片码字体大小 初始化参数为:35*/
private String fontType ="微软雅黑"; /*图片码字体类型 初始化参数为:微软雅黑*/
private String positionStr1; /*第一个位置的字符*/
private String positionStr2; /*第二个位置的字符*/
private String positionStr3; /*第三个位置的字符*/
private String positionStr4; /*第四个位置的字符*/
private String imageStr; /*图片上的字符*/
private int imageWidth = 200; /*图片初始化宽度*/
private int imageHeight = 50; /*图片初始化高度*/
private String imageFilePath = "c:validateImage.jpg"; /*验证码输出路径*/
private static Random random = new Random(); /*产生随机数机器*/
public static Color getColor() { /*产生一个随机背景色*/
return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));
}
public static Color reverseColor(Color c) { /*产生一个随机背景色的反色(即设置为图片字体颜色)*/
return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getRed());
}
private String methodForGetImageStr() { /* 获得从String[] collectStr字符集合中产生的4个字符*/
//所有字符产生集合
String[] collectStr = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z" };
//产生每一个字符串位置的随机字符
positionStr1 = collectStr[random.nextInt(collectStr.length)];
positionStr2 = collectStr[random.nextInt(collectStr.length)];
positionStr3 = collectStr[random.nextInt(collectStr.length)];
positionStr4 = collectStr[random.nextInt(collectStr.length)];
//将以上随机字符组合成图片四个随机字符
imageStr = positionStr1 + positionStr2 + positionStr3 + positionStr4;
//加上空格显示在以便于显示在图片上看起来不是那么紧凑
String str = positionStr1 + " " + positionStr2 + " " + positionStr3 + " " + positionStr4;
return str;
}
private void methodForDrawImagePic() { /*使用绘图对象Grahics2D g对象绘制验证码图形*/
//获取绘图对象
Graphics2D g = imageBuffer.createGraphics();
//绘制干扰线大小为0-3F粗细
g.setStroke(new BasicStroke((float)(random.nextInt(3))));
//获取背景颜色
Color color = this.getColor();
//设置背景颜色
g.setColor(color);
//设置背景颜色从x=0,y=0开始化 背景色区域宽度为:imageWidth 背景色区域高度为:imageHeight
g.fillRect(0, 0, imageWidth, imageHeight);
//产生10条干扰线条
for (int i = 0; i < 10; i++) {
//设置干扰线输出的随机颜色
g.setColor(new Color(random.nextInt(255), random.nextInt(255),random.nextInt(255)));
//随机输出干扰线在图片的位置
g.drawLine(random.nextInt(200),random.nextInt(50),random.nextInt(200),random.nextInt(50));
}
//随机产生100个噪音点
for (int i = 0; i < 100; i++) {
//设置噪音点的大小宽度:0 高度:1 覆盖整个图片区域
g.drawRect(random.nextInt(imageWidth), random.nextInt(imageHeight), 0, 1);
}
//设置字体大小,字体类型
g.setFont(new Font(fontType, Font.BOLD, fontSize));
//获取图片上的四个字符
String str = methodForGetImageStr();
//取得背景色的反色
Color reverseColor = reverseColor(color);
//设置字体颜色为背景颜色的反色
g.setColor(reverseColor);
//将文字字符画在图片上
g.drawString(str, 30, 40);
}
private void methodForOutPutImageToClient() throws IOException { /*将图片输出到客户端*/
//生成图片
methodForDrawImagePic();
//使用ImageIO对象直接将imageBuffer对象以JPG 的格式传给客户端
ImageIO.write(imageBuffer, "jpg", new File(imageFilePath));
}
//图片验证码生成入口
public ValidateCode() {
try {
imageBuffer = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
methodForOutPutImageToClient();
} catch (Exception e) {
e.printStackTrace();
}
}
// 返回图片验证码字符
public String getImageStr() {
return imageStr;
}
public static void main(String args[]) {
ValidateCode code = new ValidateCode();
System.out.println("验证码字符:\t"+code.getImageStr());
}
}
评论
识别率可以达到100%。

我倒 非要弄个模糊让你看不见 就是牛逼的验证码?将验证码放在图片上显示,这就已经达到了无法让机器人识别的目的。你去看下淘宝,支付宝,中国移动,华为的。。。。。。太难识别的的验证码 体验不好。
再说了,现在验证码,会逐步被动态短信密码 所代替。
识别率可以达到100%。

我倒 非要弄个模糊让你看不见 就是牛逼的验证码?将验证码放在图片上显示,这就已经达到了无法让机器人识别的目的。你去看下淘宝,支付宝,中国移动,华为的。。。。。。太难识别的的验证码 体验不好。
识别率可以达到100%。

发表评论
-
JDK8
2017-06-08 16:32 0配置Eclipse支持JDK8 2014- ... -
缓存命中率统计-解决方案
2016-05-30 15:43 0public abstract class Abstrac ... -
Cannot convert value of type [com.sun.proxy.$Proxy64 implementing
2016-03-24 17:57 0问题描述: 想配置一个代理,并拦截ibatis的s ... -
泛型理解一
2016-03-23 21:26 0public <T> T getObjec ... -
真假ArrayList
2016-03-02 21:36 0先看一段代码 String[] arr = new St ... -
代码重构一 缓存接入
2016-02-19 13:57 0场景: 以前有一个LoadingLocalCache对 ... -
通用缓存设计一
2016-02-16 14:28 01. 什么是缓存? 缓存就是在内存中开辟一块空间 ... -
Java类设计一-工厂类,Executors
2016-02-15 10:28 0public class Executors 1.是一 ... -
谈谈线程池原理二
2016-02-14 17:17 0private ExecutorService th ... -
谈谈线程池原理-监控-解决方案
2016-02-14 14:14 0public class ExecutorMo ... -
谈谈线程池原理一
2016-02-14 14:05 01. ThreadPoolExecutor pub ... -
Disruptor PK BlockingQueue
2015-09-10 21:03 1561package com.disruptor.test3 ... -
sonar 简单安装,配置,以及使用
2015-09-07 14:36 1574服务端启动配置 1.下载sonarqube-5.1.z ... -
Spring 如何注入enum class?
2015-08-13 14:47 1383@Deprecated public enum BizU ... -
DelayQueue simple
2015-08-13 11:42 1023import java.util.concurrent.D ... -
XXX could not be redeployed because it could not be completely removed in the un
2013-05-14 15:29 1588解决办法: 把项目中引用的jar文件重新加一遍就行了,基本原 ... -
hadoop伪分布式配置
2016-02-15 10:24 500core-site.xml<?xml version ... -
Oracle 9i (版本: 9.0.1.0.1)精简客户端 绿色版
2013-03-08 15:45 0111 -
ERROR: Cannot load this JVM TI agent twice, check your java command line for dup
2016-02-15 10:24 3114ERROR: Cannot load this JVM T ... -
java.lang.ClassFormatError: Illegal class name "[L[Ljava/lang/String;;" in class
2013-01-30 20:02 7JAVA_OPTS="$JAVA_OPTS -ser ...
相关推荐
"vc++ 根据文字生成图片 文字图片验证码.zip"是一个关于如何使用Visual C++(简称VC++)编程语言来创建文字图片验证码的项目。这个压缩包可能包含必要的源代码、文档和其他资源,帮助开发者了解和实现验证码生成的...
`pmiw`可能是某个第三方库或者项目的简写,它可能提供了验证码生成算法、图片处理等功能。具体的实现细节需要查看该库的文档或源代码才能得知。通常,验证码生成器会包含随机数生成、字符扭曲、颜色填充等组件,以便...
2. **图像处理**:验证码的图像通常是非标准的,包含扭曲、噪声或遮挡,以增加机器识别的难度。这需要使用图像处理库,如Python的`PIL`(Pillow)库,它可以创建、打开、显示和修改图像。 3. **字体和颜色**:...
3. PHP 语言实现:使用 PHP 语言实现中文 GIF 动态验证码生成器,生成随机的中文 GIF 图片,以提高验证码的安全性。 设计思路: 1. 首先,生成随机数,然后根据随机数生成汉字,使用 GB2312、GBK 和 GB18030 等...
此外,每次新的验证码生成时,旧的验证码应从session中清除,防止重复使用。 在提供的文件列表中,我们看到的`.classpath`和`.project`是Eclipse项目设置文件,`WebContent`是Web应用的根目录,`src`是源代码目录,...
2. **随机性**:为了增加破解的难度,验证码生成器会从字符库中随机选取一定数量的汉字。这个数量可以由系统设定,例如4个、6个或者更多,根据安全性和用户体验的需求来平衡。 3. **扭曲和混淆**:为了防止机器识别...
在IT领域,尤其是Web开发中,图片验证码扮演着至关重要的角色。本压缩包“Internet图片验证码系统.rar”提供的内容是关于如何使用VC++(Visual C++)开发一个基于图片的随机验证码系统。 首先,我们要理解ASP...
字符训练集的标准化涉及到字符图片的大小(如统一为28*28像素)、数据的保存类型等。深度学习模型,如卷积神经网络(CNN),可通过TensorFlow、Theano、Keras等深度学习框架来构造。获取训练数据的batch函数是深度...
动态生成图片验证码的步骤如下: 1. **生成随机字符串**:首先,系统需要生成一个随机的字符串,通常包含数字和字母的组合,长度在4到6位之间。这个字符串就是验证码的内容,用于用户输入验证。 2. **扭曲和变形**...
生成图片验证码的过程通常包括以下几个步骤: 1. **随机字符生成**:首先,系统会随机选择一组字符,这可以是字母(大小写)、数字或者特定的符号。字符的数量通常是4到6个,这样既能保证识别的难度,又不至于太过...
在本文中,我们将探讨一个使用C++编程语言实现的验证码生成器,它基于BMP位图进行工作。C++是一种通用的、面向对象的编程语言,因其高效性和灵活性而在系统编程和游戏开发等领域广泛使用。 验证码的生成通常包括...
【标题】:“机器学习识别图片验证码” 在当前的网络环境中,图片验证码(CAPTCHA)是一种广泛使用的安全机制,用于防止自动机器人程序进行恶意操作。它要求用户输入图像中显示的一串字符或数字,以证明他们是有...
在图片验证码中,通常会显示一些扭曲的字母或数字,用户需要正确输入才能通过验证。而“图片验证码特殊字体文件”正是这种验证码背后的关键组成部分。 特殊字体文件是验证码设计的核心,因为它们决定了字符的形状、...
JAVA提供了大量的标准库,如AWT和Swing,用于图形用户界面的构建,可能被用来生成验证码图像。 2. **图像处理**:验证码通常涉及图像处理技术,如像素操作、图像扭曲、滤波等。JAVA中的`java.awt.image`包提供了...
这个“JSP编程小技巧”压缩包文件包含了关于JSP开发的一些实用技巧,如文件上传、图片验证码以及JSP标准动作等常见功能的实现。以下是对这些知识点的详细说明: 1. **文件上传**: 文件上传是Web应用中常见的功能...
【PHP生成Gif图片验证码详解】 验证码是一种常用的安全机制,用于防止自动机器人或恶意脚本进行非法操作。本文将深入探讨如何使用PHP生成Gif格式的动态验证码,其中包括添加噪点、干扰线、网格、随机颜色背景、随机...
- **验证码生成**:能够根据用户的请求实时生成验证码,并将生成的验证码图片展示给用户。 - **验证码识别**:提供接口或功能让用户输入验证码,系统自动进行校验,判断输入是否正确。 - **错误处理**:对于输入...
标题 "识别图片数字-验证码" 暗示了我们探讨的主题是关于图像处理技术,特别是针对验证码的自动识别。验证码(CAPTCHA)是一种用于验证用户是否为人类的技术,通常包含随机生成的一串数字或字母,以图像形式显示。在...
然而,随着技术的发展,更复杂的验证码解决方案(如谷歌的reCAPTCHA)已经成为对抗自动化攻击的标准,它们提供了更高的安全性,同时也考虑到了用户体验。在实际项目中,根据需求和安全性要求,你可能需要考虑使用...
验证码是一种用于验证用户是否为真实人类的机制,通常通过让用户输入图片上显示的一串随机字符来实现。在用户登录过程中,验证码可以防止自动脚本或机器人进行大量的无效登录尝试。在这个项目中,验证码的目的是防止...