package rdweb;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class WiTest {
public static 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);
}
/**
*
* @param args
*/
public static void main(String[] args) {
// 在内存中创建图象
int width=80, 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));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生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);
}
// 取随机产生的认证码(5位数字)
String sRand="";
for(int i=0;i<5;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("CertiCode",sRand);
// 图象生效
g.dispose();
String filepath = "c://ff.jpeg";
File imgfile = new File(filepath);
FileOutputStream fos;
try {
fos = new FileOutputStream(imgfile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
bos.close();
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
Java随机生成验证码图片,适用于web登录验证等。个人觉得很不错~
验证码(CAPTCHA)是一种用于验证用户是否为人类的自动化测试技术。...以上就是使用Java生成验证码的基本流程和关键知识点。通过调整各种参数和细节,可以根据实际需求定制出更复杂、更难被机器识别的验证码系统。
接着,将随机生成的字符绘制到图片上,调整字体、颜色和位置以增加识别难度。最后,使用`ImageIO.write`方法将图片写入到HTTP响应流,客户端即可接收到验证码图片。 前端部分,layui是一个流行的JavaScript框架,它...
在Java中,生成随机验证码涉及到多个知识点,包括字符串处理、随机数生成、图像处理以及字体操作等。下面将详细介绍这些内容。 首先,我们要生成随机数字或字母。在Java中,可以使用`java.util.Random`类来生成...
JAVA实现随机图片验证码简单方法.rtf
随机生成验证码工具类 长度为4位或者6位
java生成随机验证码, 这是一个demo, eclipse项目,导入eclipse即可
随机验证码。 - 随机生成十组六位字符组成的验证码。 - 验证码由大小写字母、数字字符组成。
Java 随机生成图片验证码是一种常见的网络安全技术,主要用于防止自动化程序(如机器人)进行恶意操作,例如批量注册、刷票等。在这个过程中,我们通常会创建一个包含随机字符的字符串,然后将其显示为带有扭曲、...
在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。
6. **保存图像**:最后,将图像保存到内存中的输出流,准备发送到客户端。 7. **响应HTTP请求**:Servlet接收到请求后,调用生成验证码的逻辑,然后以JPEG或PNG格式将图像数据响应给客户端。 8. **存储验证码**:...
随机生成验证码内容后,使用`g.drawString`方法将内容绘制到图像上。最后,将图像保存为JPG格式的文件,这里使用了`ImageIO.write`方法。在保存文件之前,我们检查文件是否存在,如果存在则先删除再创建,确保每次...
这个“随机生成验证码工具jar包”是一个Java编写的程序库,它能够帮助开发者快速地在他们的应用中集成验证码功能。让我们深入了解一下这个jar包以及与之相关的Java和jar文件的知识。 首先,Java是一个广泛使用的...
随机生成验证码源码(java)
随机生成手机验证码的java源码文件,结果是在后台输出,可根据选择生成几位随机码或者随机码是否带有字母。
首先,`IdentifyingCode.java`可能是一个类,它代表验证码对象,包含了生成验证码的核心逻辑。这个类通常会包含以下几个关键部分: 1. **生成随机数字**:为了创建加减法问题,我们需要生成两个或更多随机整数。...
后台Java代码使用了VerifyCodeUtil.java文件来生成验证码图片。该文件主要实现了验证码的生成、随机字符的生成、字体和颜色的随机选择、干扰线的添加等功能。 ```java package com.paladin.qos.util; import javax...
源代码可能包括生成验证码的类、处理用户输入的控制器以及相关的配置文件。资源文件可能包含了用于绘制验证码的自定义字体,以显示中文字符。说明文档则详细解释了项目的用途、如何运行和使用示例,帮助开发者快速...
该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。本源码包含了工具类源码及调用示例,可供开发者参考使用,集成到您的项目中。