java实现随机验证码的图片

链接地址:http://blog.sina.com.cn/s/blog_407a68fc010006qo.html

1、一共需要2个常用java文件(RandomCode.java和RandomCodeCtrl.java):

(a、)RandomCode.java是个普通的java文件;内容如下:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class RandomCode {
   /**
    * 随机取得一个字体
    * @param Random random  随机数
    * @return Font 返回一个新字体
    */ 
  private Font getsFont(Random random){
   return new Font("Fixedsys",Font.CENTER_BASELINE,18);
  }
   /**
    * 返回一个随机颜色
    * @param int fc  随机数
    * @param int bc  随机数
    * @param Random random  随机数
    * @return Color 返回一个新颜色
    */ 
  private Color getRandColor(int fc,int bc,Random random){
        if(fc>255) fc=255;
        if(bc>255) bc=255;
        int r=fc+random.nextInt(bc-fc-6);
        int g=fc+random.nextInt(bc-fc-4);
        int b=fc+random.nextInt(bc-fc-8);
        return new Color(r,g,b);
    }
   /**
    * 生成随机数图片
    */ 
  public void getRandcode(HttpServletRequest request,HttpServletResponse response)throws Exception{
   System.setProperty("java.awt.headless","true");
   HttpSession session = request.getSession();
   int width=80, height=22;//设置图片大小
   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics g = image.getGraphics();
   Random random = new Random();
   g.fillRect(1, 1, width, height);//设定边框
   g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));
   g.setColor(getRandColor(111,133,random));
   //产生随机线
   for (int i=0;i<11;i++){
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(13);
    int yl = random.nextInt(15);
    g.drawLine(x,y,x+xl,y+yl);
   }
   //产生随机点
   g.setColor(getRandColor(130,150,random));
   //产生5个随机数
   String sRand="";
   for (int i=0;i<5;i++){
       g.setFont(getsFont(random));
       g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
       String rand=String.valueOf(getRandomString(random.nextInt(36)));
       sRand+=rand;
       g.translate(random.nextInt(3),random.nextInt(3));
       g.drawString(rand,13*i,16);
   }
   session.removeAttribute("Rand");
   session.setAttribute("Rand",sRand);
   g.dispose();
   ImageIO.write(image, "JPEG", response.getOutputStream());
  }
  
  private String getRandomString(int num){
   String randstring = "0123456788ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   return String.valueOf(randstring.charAt(num));
  }
 
 }

(b、) RandomCodeCtrl.java是个servlet的java文件;内容如下:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RandomCodeCtrl extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest req,
      HttpServletResponse resp) throws ServletException, IOException {
  resp.setContentType("image/jpeg");
  resp.setHeader("Pragma","No-cache");
  resp.setHeader("Cache-Control","no-cache");
  resp.setDateHeader("Expires", 0);
  RandomCode rc = new RandomCode();
  try{
   rc.getRandcode(req,resp);
  }catch(Exception e){
   System.err.println(e);
  }
 }

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }

}

2、前台页面调用;举例:

<img src="http://127.0.0.1:8080/RandomCodeCtrl" />

3、验证输入信息和随机生成的图片显示的内容相同:

在RandomCode.java代码中随机生成的图片之前,就把随机生成的图片显示的内容放在session中;所以只需判断session中getAttribute("Rand")的值和用户页面输入的验证码值相等即可。

时间: 2024-07-31 10:15:19

java实现随机验证码的图片的相关文章

随机验证码、图片验证码和邮箱发送用户验证码

随机验证码.图片验证码和邮箱发送用户验证码 一.随机验证码 随机验证码的生成比较简单一般在注册用户的时候与邮箱或者手机信息接口相结合实现发送验证码功能,随机验证码只需要使用python内置的random随机数函数,调用random模块:import random,具体实现代码块 #随机验证码 def authCode(): code = '' for i in range(6): current = random.randrange(0,6)#randrange随机生成0-6的数字,但不包括6

黑马day04 画一个汉字的随机验证码的图片

下面的程序详细介绍了如何画一个随机验证码发送到客户端即浏览器进行显示: 1.画随机验证码的代码: package cn.itheima.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import j

.Net创建随机验证码附带图片

using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Text; namespace ZC.Common{    public class ValidateCode    {        public 

python模块之PIL模块(生成随机验证码图片)

PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 首先需要安装一下pillow包 pip install pillow 然后就可以调用PIL里的类了 from PIL import Image from PIL import ImageFont from PIL import ImageDraw from PIL import ImageFilt

python模块PIL-获取带噪点噪线的随机验证码

from PIL import Image from PIL import ImageDraw from PIL import ImageFont from io import BytesIO import random class ValidCodeImg: """ 生成一个经过降噪后的随机验证码的图片 :return 生成图片的bytes类型的数据 """ def __init__(self, width=175, height=35, co

输出随机验证码图片

1 /** 2 * //输出随机验证码图片:CAPTCHA图像 3 */ 4 public class ServletDemo1 extends HttpServlet { 5 private static final long serialVersionUID = 1L; 6 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEx

struts2生成随机验证码图片

之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: CreateImageAction: package com.xiaoluo.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedIm

java生成简单验证码图片

概要 最近项目需要用java实现输出随机验证码图片到前台,正好有机会接触下java的绘图类,完成需求后也有时间做个总结,写篇随笔记录下也希望能帮助到有同样需求的人! 需求流程图 1.生成随机数 在java中生成随机数无非就是调用Random的api,但为了后续更好的实用,应该分成多种组合以适应需求的变化,应将生成随机数的个数和类型组合还有排除字符抽取成参数,这个也比较简单,没有什么难度,就直接贴上代码 1 /** 2 * 生成随机验证码 3 * @param type 类型 4 * @param

用Java制作一个简单的图片验证码

//Java实现简单验证码功能 package project; import java.awt.Color; import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage; import javax.swing.I