首先我们来整理下验证码需要怎么做:
验证码分为三个步骤
(1)生成一组随机数
(2)生成一张图片
(3)像浏览器发送验证码图片
那接下来 我们一步步来实现:
第一步 :生成一组随机数
代码如下:
//随机产生随机数的验证码
String chars="0123456789abcdefghijklmnopqrstuvwxyz";
char[] rands=new char[5];//用来存放验证码的数组
for(int i=0;i<5;i++){
Random random = new Random();
int num=random.nextInt(chars.length());
rands[i]=chars.charAt(num);//用数组方式取出chars里面的字符
}
System.out.println(rands);//打印生成的验证码第二步:生成一张图片
代码如下:
//把验证码制作成图片形式:
//创建图像缓冲区:
BufferedImage image = new BufferedImage(100,50,BufferedImage.TYPE_INT_RGB);
//绘制图:
Graphics grap =image.getGraphics();
//设置背景颜色
grap.setColor(Color.blue);
Font font = new Font("黑体",Font.ITALIC,30);
//设置字体
grap.setFont(font);
//使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。
grap.drawString(rands[0]+"", 0,30);//绘制字符所在的位置
grap.drawString(rands[1]+"", 20,30);//绘制字符所在的位置
grap.drawString(rands[2]+"", 40,30);//绘制字符所在的位置
grap.drawString(rands[3]+"", 60,30);//绘制字符所在的位置
grap.drawString(rands[4]+"",80,30);//绘制字符所在的位置第三步:发送验证码图片
代码如下:
//把图片用二进制发送给浏览器
//先把这个图片转换成Byte数组
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
ImageIO.write(image, "png", byteArrayOutputStream);
byte[] bytes=byteArrayOutputStream.toByteArray();
//通过二进制流传输图片
ServletOutputStream OutputStream=response.getOutputStream();
response.setContentType("image/jpeg");//设置发送的类型
response.setContentLength(bytes.length);//设置发送的数组长度
OutputStream.write(bytes);//写入流
OutputStream.close();//关闭流这样一个验证码的功能就差不多就结束啦!
总结
感谢各位博友的阅读 ,欢迎您们提出意见 让我们一起交流。感谢你们对CYBLOG的支持理解,本次讲解到此结束!






赞









