java 随机码_JAVA-生成随机验证码

RandomValidateCode.java

package com.checkcode.servlet;

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.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class RandomValidateCode {

public static final String RANDOMCODEKEY = "randomValidateCode"; // 放到session中的key

private Random random = new Random();

private String randomString = ""; // 随机产生的字符串

private int width = 80; // 宽

private int height = 30; // 高

private int lineSize = 40; // 干扰线数量

private int randomSize = 4; // 验证码字符数量

/**

* 获取可随机产生的字符串 0-9/a-z/A-Z

*/

public void getRandomString() {

StringBuilder str = new StringBuilder();

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

str.append(i);

}

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

str.append((char) (i + 65));

}

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

str.append((char) (i + 97));

}

this.randomString = str.toString();

}

/**

* 获取颜色

*

* @param fc

* @param bc

* @return

*/

public Color getColor(int fc, int bc) {

if (fc > 225) {

fc = 225;

}

if (bc > 225) {

bc = 225;

}

int r = fc + random.nextInt(bc - fc - 16);

int g = fc + random.nextInt(bc - fc - 14);

int b = fc + random.nextInt(bc - fc - 18);

return new Color(r, g, b);

}

/**

* 获取字体

*

* @return

*/

public Font getFont() {

return new Font("Arial", Font.PLAIN, 18);

}

/**

* 生成随机图片

*

* @param request

* @param response

*/

public void getRandomImage(HttpServletRequest request,

HttpServletResponse response) {

// 初始化字符串

getRandomString();

// 1.获取Image类

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_3BYTE_BGR);

// 2.获取图形绘制类Graphics,对图片进行绘制

Graphics graphics = image.getGraphics();

graphics.fillRect(0, 0, width, height);

graphics.setFont(getFont());

graphics.setColor(getColor(110, 133));

// 3.绘制干扰线

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

drawLine(graphics);

}

// 4.绘制随机字符

String str = "";

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

str = drawString(graphics, str, i);

}

// 5.加入session

request.getSession().removeAttribute(RANDOMCODEKEY);

request.getSession().setAttribute(RANDOMCODEKEY, str.toLowerCase()); // 全部加入小写字符

System.out.println(str.toLowerCase());

// 6.处理绘制类

graphics.dispose();

// 7.输出到客户端

try {

ImageIO.write(image, "JPEG", response.getOutputStream());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 绘制字符串

*

* @param graphics

* @param randomStr

* @param i

* @return

*/

private String drawString(Graphics graphics, String str, int i) {

graphics.setFont(getFont());

graphics.setColor(new Color(random.nextInt(101), random.nextInt(111),

random.nextInt(121)));

String rand = String.valueOf(getRandomStr(random.nextInt(randomString

.length())));

str += rand;

graphics.translate(random.nextInt(3), random.nextInt(3));

graphics.drawString(rand, 13 * i, 16);

return str;

}

/**

* 通过随机数截取字符

*

* @param num

* @return

*/

public String getRandomStr(int num) {

return String.valueOf(randomString.charAt(num));

}

/**

* 绘制干扰线

*

* @param graphics

*/

private void drawLine(Graphics graphics) {

int x1 = random.nextInt(width);

int y1 = random.nextInt(height);

int x2 = random.nextInt(13) + x1;

int y2 = random.nextInt(15) + y1;

//绘制一条干扰线,从(x1,y1)坐标到,(x2,y2)坐标

graphics.drawLine(x1, y1, x2, y2);

}

public static void main(String[] args) {

System.out.println();

}

}

ImageServlet.java

package com.checkcode.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class ImageServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("image/jpeg");

// 设置相应类型,告诉浏览器输出的内容为图片

response.setHeader("Pragma", "No-cache");

// 设置响应头信息,告诉浏览器不要缓存此内容

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expire", 0);

RandomValidateCode randomValidateCode = new RandomValidateCode();

try {

randomValidateCode.getRandomImage(request, response);

// 输出图片方法

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGet(req, resp);

}

}

randomCode.jsp

pageEncoding="UTF-8"%>

Insert title here

function refresh(obj) {

obj.src = "imageServlet?" + Math.random();

}

输入验证码

imageServlet

web.xml添加servlet配置

imageServlet

com.checkcode.servlet.ImageServlet

imageServlet

/imageServlet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值