A. java怎么生成验证码图片
以下仅供参考:
这是jsp页面,起个名字例如叫image.jsp:
<%@ page contentType="image/JPEG"
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
pageEncoding="GBK"%><%!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);
}%><%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
int width = 60, 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(getRandColor(160, 200));
for (int i = 0; i < 100; 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);
}
String sRand = "";
for (int i = 0; i < 4; 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.setAttribute("code", sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
在你需要引入的地方:
<img border=0 src="image.jsp">
就可以了。。。
B. java 模拟登陆带验证码的网页,就想知道怎么将验证码以图片的形式下载到本地。。。。。
首先你要在前台获取验证信息 这点应该会吧 前台传数据到后台
然后你要用swing 做一个图片
然后你把数据写进去
然后你保存到本地
是不是就等于下载了
C. 用java随机生成四位验证码,只求编程代码
不知道你问的是不是生成这种图片验证码?
如果只要一个随机四位数 那这行代码就够了(new Random().nextInt(9000) + 1000;),
如果是生成页面图片验证码就是下面的了:
//设定 响应模式
resp.setContentType("image/jpeg");
// 生成令牌环数据;
Integer token = new Random().nextInt(9000) + 1000;
// 保存令牌环数据到session中
req.getSession().setAttribute(IMAGE_TOKEN_NAME, token);
// 生成令牌环图片
ServletOutputStream out = resp.getOutputStream();
BufferedImage img = new BufferedImage(60, 20,
BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.YELLOW);
g.fillRect(0, 0, img.getWidth(), img.getHeight());
g.setColor(Color.BLUE);
g.setFont(new Font("", Font.BOLD, 18));
g.drawString(String.valueOf(token), 10, 16);
ImageIO.write(img, "jpg", out);
out.close();
D. java验证码的实现 需要知道吗
一.什么是验证码及它的作用
:验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录。
二.图文验证码的原理
:在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在通过Java的绘图类以图片的形式输出该验证码。为了增加验证码的安全级别,可以输出图片的同时输出干扰线,最后在用户提交数据的时候,在服务器端将用户提交的验证码和Session保存的验证码进行比较。
三.验证码所需的技术
:i.因为验证码中的文字,数字,应为都是可变的,故要用到随机生成数技术。
ii.如果验证码中包含汉字,则要用到汉字生成技术.
iii.可以使用Ajax技术实现局部刷新
iv.可以使用图片的缩放和旋转技术,
vi.随机绘制干扰线(可以是折现,直线等)
vii.如果考虑到验证码的安全性,可以使用MD5加密.
E. 求一个Java语言编写的gif动态验证码 就是百度注册用户的那种
生成验证码代码
package machine.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class ValidateCodeAction extends ActionSupport {
private ByteArrayInputStream inputStream;
public ByteArrayInputStream getInputStream() {
return inputStream;
}
public void setInputStream(ByteArrayInputStream inputStream) {
this.inputStream = inputStream;
}
public String execute() throws Exception {
this.setInputStream(generateImage());
return "success";
}
private ByteArrayInputStream generateImage() throws IOException {
BufferedImage image = new BufferedImage(100, 20,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 100, 20);
drawbg(g);
drawValidateCode(g);
ByteArrayInputStream input = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(image, "JPEG", bos);
byte[] buf = bos.toByteArray();
input = new ByteArrayInputStream(buf);
return input;
}
private void drawbg(Graphics g) {
Random rand = new Random();
int randx;
int randy;
for (int i = 0; i < rand.nextInt(100) + 400; i++) {
randx = rand.nextInt(100);
randy = rand.nextInt(20);
g.drawLine(randx, randy, randx, randy);
}
}
private void drawValidateCode(Graphics g) {
String code = generateCode();
Random rand = new Random();
int x = 0;
Font font = new Font("Times New Roman", Font.PLAIN, 18);
g.setFont(font);
for (int i = 0; i < code.length(); i++) {
int y = 20 - rand.nextInt(4);
g.setColor(new Color(rand.nextInt(155), rand.nextInt(155), rand
.nextInt(155)));
g.drawString(code.substring(i, i + 1), x, y);
x += 20;
}
}
private String generateCode() {
Random rand = new Random();
StringBuffer sbr = new StringBuffer(
"");
int codeLen = 5;
StringBuffer codeSbr = new StringBuffer();
for (int i = 0; i < codeLen; i++) {
int select = rand.nextInt(sbr.length());
codeSbr.append(sbr.charAt(select));
sbr.deleteCharAt(select);
}
ServletActionContext.getRequest().getSession().setAttribute(
"validateCode", codeSbr.toString());
return codeSbr.toString();
}
}