生成随机验证码——(一)

在用户登录某个网站时,为了网站为了防止恶意访问,会要求用户输入用户账户和密码外,还需要输入一个随机验证码。随机验证码是一副嵌入在浏览器中的图片,随机验证码通常是在服务器端生成的,当然有些是在客户端生成。这里将会对服务器端和客户端的验证码分别进行说明。通常来说,随机验证码是有服务器端生成,验证码的校验也是放在服务器端验证的,服务器端保存了一份验证码(通常保存在session中),当用户从客服端输入验证码,并将其发送到服务器段进行验证。这个可以写成一个工具类,包括一个随机数字(这里是4位阿拉伯数字)生成器,及一个将此随机数字写入到浏览器的方法。

生成随机验证码,主要需要使用到的类有:

BufferedImage, 主要是用来在内存中申请一块图像缓存
	Graphics2D 此类为一个面板图像,可以再次对象上进行绘画,此对象是通过BufferedImage对象的getGraphics()方法得到的
	ImageIO, 图像IO,可以通过调用此方法的write方法,将BufferedImage对象写入到浏览器中。
具体代码如下:

public class ImageCheckCodeUtils {

	public static void getImageCode(HttpServletResponse response)
			throws ServletException, IOException {

		//6.设置头,控制浏览器不要缓存图片数据
		response.setHeader("Expires", "-1");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");
				
		//5.通知浏览器以图片方式打开
		response.setHeader("Content-type", "image/jpeg");
		
		//1.在内存中创建一副图片
		BufferedImage image = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
		
		//2.得到图片
		Graphics2D  g = (Graphics2D) image.getGraphics();
		//设置图片背景色
		g.setColor(new Color(55, 165, 205));
		g.fillRect(0, 0, 60, 20);
		
		
		//3.向图片上写数据
		g.setColor(Color.BLUE);
		g.setFont(new Font(null,Font.BOLD,20));
		String checkcode = makeNum();
//		request.getSession().setAttribute("checkcode", checkcode);
		g.drawString(checkcode, 0, 20);
		
		//4.将图片写给浏览器
		ImageIO.write(image, "jpg", response.getOutputStream());
		
		
	}
	
	private static String makeNum() {
			
			Random r = new Random();
			String num = r.nextInt(9999) + "";  //0-9999999  123  1234567
			StringBuffer sb = new StringBuffer();
			for(int i=0;i<4-num.length();i++){
				sb.append("0");
			}
			
			num = sb.toString()+num;
			
			return num;
		}
}
上面示例仅仅是生成一个4位随机验证码,但是在实际应用中,我们能发现,随机验证码存在一定的干扰,比如故意做成清晰度不好的,或者增加一定干扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值