首先我们来整理下验证码需要怎么做:
验证码分为三个步骤
(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的支持理解,本次讲解到此结束!