Jsp servlet验证码工具类分享(java编写jsp验证码)学到了

随心笔谈4个月前发布 admin
217 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了一个名为`VeriyCodeUtils`的Java类,其静态方法`newVeriyCode`用于生成随机颜色的验证码。该方法通过以下步骤实现: 1. **初始化参数**:定义了验证码的宽度(90像素)、高度(40像素)和字符数量(5个),并创建了一个包含大写字母、小写字母和数字的字符序列。 2. **创建图像对象**:使用`Java.awt.Image`类创建了一个8位RGB的`BufferedImage`,并设置了白色背景和黑色边框。 3. **绘制干扰线**:通过随机生成直线的方式,增加了图像的复杂性。 4. **生成验证码**:使用字符序列中的随机字符生成验证码。对每个字符随机选择一种颜色,并将其绘制在指定位置。 5. **输出图像**:将生成的`BufferedImage`写入JPEG格式的输出流。 文章的核心内容是通过随机颜色和干扰线的方式生成难以破解的验证码,适用于需要高安全性的应用场景。


package com.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

public class VeriyCodeUtils {

public static String newVeriyCode(OutputStream output)
{
int width=90;
int height=40;
int codeCount=5;
char[] codeSequence={ ‘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’ };

//创建图像对象,8位RGB
BufferedImage buffered=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//通过Crapahices来绘制图像到BufferedImage中
Graphics2D gra=buffered.createGraphics();

//设置图片背景:白色
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, width, height);

//设置字体,字体大小根据图片高度决定
gra.setFont(new Font(“Fixedsys”,Font.PLAIN,height-2));

//设置边框:黑色,1cm
gra.setColor(Color.BLACK);
gra.drawRect(0, 0, width-1, height-1);

//生成10条黑色干扰线
gra.setColor(Color.BLACK);
Random ran=new Random();
for(int i=0; i < 70;i++)
{
int x=ran.nextInt(255);
int y=ran.nextInt(255);
int x1=ran.nextInt(255);
int y1=ran.nextInt(255);
gra.drawLine(x, y,x+x1, y+y1);//画直线
}
//生成验证码
StringBuffer sb=new StringBuffer();
int r=0,g=0,b=0;
for(int i=0; i < codeCount; i++)
{
String strRand=String.valueOf(codeSequence[ran.nextInt(codeSequence.length)]);
//对每位验证码都生成不同的颜色,增加识别系统难度
r=ran.nextInt(255);
g=ran.nextInt(255);
b=ran.nextInt(255);
gra.setColor(new Color(r, g, b));
gra.drawString(strRand, (i+1)*13, height-4);
sb.append(strRand);
}
try {
ImageIO.write(buffered, “jpeg”, output);
} catch (Exception e) {
throw new RuntimeException(e);
}

return sb.toString();
}
}

© 版权声明

相关文章