验证码的实现
2016-04-15 10:02
471 查看
各种网页的登录界面上,登录时都有验证码,常规的验证码就是4位,26个字母及10个阿拉伯数字组成,下面,我就写一个常规验证码的制作
package com.tly.Servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class DrawImage extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 绘图 */ //1.创建一个内存映像(画布) BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_INT_RGB); //2.获得画笔 Graphics g = image.getGraphics(); //3.设置画笔颜色 g.setColor(new Color(255,255,255)); //4.设置画布背景颜色 g.fillRect(0, 0, 80, 30); //5.生成一个随机数 Random r = new Random(); //String number = r.nextInt(10000) + ""; String number = getNumber(4); //将随机数绑定到session对象 HttpSession session = request.getSession(); session.setAttribute("number", number); //6.将随机数绘制到图片上 g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); g.setFont(new Font(null, Font.ITALIC, 24)); g.drawString(number, 4, 25); //7.加干扰线 for(int i = 0;i < 8;i++){ g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30)); } /* * 压缩图片,然后输出 */ //1.设置服务器返回的数据类型为图片 response.setContentType("image/jpeg"); //2.获得输出流 OutputStream os = response.getOutputStream(); //3.压缩图片并输出 ImageIO.write(image, "jpeg", os); os.close(); } private String getNumber(int size){ String number = ""; String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random r = new Random(); for(int i = 0;i < size;i++){ number += chars.charAt(r.nextInt(chars.length())); } return number; } }不足之处,请大家多多指正。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树