java 生成验证码_JAVA随机生成验证码(一)

图片验证码原理:服务器生成包含随机字符的字符串图片发给客户端,客户端提交数据需要填写字符串作为验证。而字符串保存在图片中,机器难以识别,达到防止有人利用程序恶意发送信息的目的。

AAffA0nNPuCLAAAAAElFTkSuQmCC

JAVA随机生成图片

JAVA随机生成图片步骤如下:

创建图片缓存区 传参为宽高和图片类型

BufferedImage bi = new

BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

获取画笔并绘画

Graphics g = bi.getGraphics(); //获取画笔

g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体

g.setColor(color);//设置画笔颜色

g.fillRect(0, 0, width, height); //绘制背景

输出图片

ImageIO.write(bi, "JPG", resp.getOutputStream());

JAVA实现验证码实例

servlet生成验证码图片源码

package com.javaweb.respones;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class IdentityServlet extends HttpServlet{

// 设置字符

public static final char[] chars="1234567890QWERTYUIOPASDFGHJKLZXCVBNM".toCharArray();

// 设置随机数

public static Random random = new Random();

// 获取4位随机数

public static String getRandomString(){

StringBuffer buffer = new StringBuffer();

int index; //获取随机chars下标

for(int i=0;i<4;i++){

index = random.nextInt(chars.length); //获取随机chars下标

buffer.append(chars[index]);

}

return buffer.toString();

}

// 获取随机颜色

public static Color getRandomColor(){

return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));

}

// 返回某颜色的反色

public static Color getReverseColor(Color c){

// 防止反色和原色相近

if(c.getRed()<130&&c.getRed()>125 && c.getBlue()<130&& c.getBlue()>125 &&

c.getGreen()<130&&c.getGreen()>125){

return new Color(255,255,255);

}else{

return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());

}

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String code = getRandomString(); //获取随机验证码

req.getSession().setAttribute("code", code); //放入Session

int width = 100; //图片宽度

int height = 30; //图片高度

Color color = getRandomColor(); //随机色,用于背景色

Color reverse = getReverseColor(color); //反色,用于前景色

/**

* 生成带字符串的文本图片

*/

// 1.创建图片缓存区 传参为宽高和图片类型

BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

// 2.获取画笔并绘画

Graphics g = bi.getGraphics();

g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体

g.setColor(color);//设置画笔颜色

g.fillRect(0, 0, width, height); //绘制背景

g.setColor(reverse); //设置画笔颜色

g.drawString(code, 18, 20); //绘制字符

// 设置最多100个噪音点

for(int i=0,n = random.nextInt(100);i

g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);

}

// 3.输出图片

ImageIO.write(bi, "JPG", resp.getOutputStream());

}

}

生成图片验证码主要应用随机数生成器Random生成随机颜色绘制背景,取反色*绘制字符,并绘制最多100随机位置的噪音点,增加识别难度。

配置XML

IdentityServlet

com.javaweb.respones.IdentityServlet

IdentityServlet

/servlet/IdentityServlet

html展示页面

function reloadImage(){

document.getElementById('btn').disable=true;

document.getElementById('identity').src='servlet/IdentityServlet?time='

+new Date().getTime();

}

IdentityServlet

截图展示

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

建议配合课程 java实现验证码制作一起看,当然感觉视频太慢的同学只看文章就可以。

下篇介绍利用组件Jcaptcha和Kaptcha生成验证码。

附:个人Blog地址----codinghjy's blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值