java数字验证码生成和使用_java随机生成验证码-数字字母

本文介绍了如何在Java中生成数字验证码,包括设置背景色、创建干扰线、随机选择字符和绘制文字。代码示例展示了如何使用BufferedImage、Graphics和Random类来创建一个4位数字的验证码图片,并将其保存到内存缓冲区。
摘要由CSDN通过智能技术生成

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();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值