正文

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

文章摘要

这篇文章介绍了一个名为`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(); } }