java随机生成验证码-数字字母
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;public class Test {public static void main(String[] args) {ByteArrayOutputStream output=new ByteArrayOutputStream();//可以捕获内存缓冲区【生成的图片在缓冲区里面】的数据,将数据装换成字节数组 ,输出流的缓冲区的大小会随着数据的不断写入而自动增加 使用toByteArray() toString()获得生成字节数组的数据String test = getCode(output);System.out.println(test);}private static String getCode(ByteArrayOutputStream output){//获得验证码的缓存区BufferedImage bi=new BufferedImage(68,25,BufferedImage.TYPE_INT_RGB);//得到制图用的类Graphics g=bi.getGraphics();//得到图片的背景颜色Color c=new Color(224,205,18);g.setColor(c);g.fillRect(0, 0, 68, 25);//颜色的填充区域//设定字体Font f=new Font("宋体",Font.BOLD,25);//字体加粗g.setFont(f);Random r=new Random();//设置产生随机数]//随机产生9条干扰线,试图中的验证码不易被其他的程序探测到for(int i=0;i<155;i++){int x=r.nextInt(68);int y=r.nextInt(22);int x1=r.nextInt(12);int y1=r.nextInt(12);g.drawLine(x, y, x1, y1);}//随机数的产生char[] ch="123456789qwertyupkjhgfdsazxcvbnmQWERTYUPKJHGFDASZXCVBNM".toCharArray();//随机产生4个随机数int len=ch.length;//四个随机数在该范围内产生StringBuffer sb=new StringBuffer();//目的就是为了下面的字符拼接for(int i=0;i<4;i++){int temp=r.nextInt(len);g.setColor(new Color(r.nextInt(150),r.nextInt(220),r.nextInt(180)));g.drawString(ch[temp]+"", i*15+5, 21);//得到每个数字的位置sb.append(ch[temp]);}//ImageIO.write(bi, "jpg", response.getOutputStream())//动态的生成图片//request.getSession().setAttribute();try {ImageIO.write(bi, "jpg",output);//动态的生成图片以jpg的形式放在缓冲区里} catch (IOException e) {System.out.println(e.getMessage());}return sb.toString();}}结果:2ahS