`
阅读更多

下面的代码都是抄过来的,不怎么理解,用的时候方便copy

在jsp页面写上<img src="authImg" height:20px; width:60px"/>,就会自动的将request中的authImg加进去,不知道怎么回事,应该是会自动调用的。高和宽的值也要和代码中的一致。

代码如下,这段代码会生成随机的字母与数字混合的验证码:

public class AuthImg extends HttpServlet {

 private static final long serialVersionUID = -8281845659081613239L;

 private Font mFont = new Font("Times New Roman", Font.PLAIN, 18);

 public void init() throws ServletException {
 }

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("image/jpeg");
  ServletOutputStream out = response.getOutputStream();

  int width = 60, height = 20;
  BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);

  Graphics g = image.getGraphics();
  Random random = new Random();

  g.setColor(getRandColor(200, 250));
  g.fillRect(0, 0, width, height);

  g.setFont(mFont);

  g.setColor(getRandColor(160, 200));
  for (int i = 0; i < 155; i++) {
   int x = random.nextInt(width);
   int y = random.nextInt(height);
   int xl = random.nextInt(12);
   int yl = random.nextInt(12);
   g.drawLine(x, y, x + xl, y + yl);
  }

  String rand = RandomChar.getChars(4, 4);
  char c;
  for (int i = 0; i < 4; i++) {
   c = rand.charAt(i);
   g.setColor(new Color(20 + random.nextInt(110), 20 + random
     .nextInt(110), 20 + random.nextInt(110)));
   g.drawString(String.valueOf(c), 13 * i + 6, 16);
  }
  HttpSession seesion = request.getSession();
  seesion.setAttribute("authCode", rand);
  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  encoder.encode(image);
  out.close();
 }

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

 public void destroy() {
 }

 private Color getRandColor(int fc, int bc) {
  Random random = new Random();
  if (fc > 255) {
   fc = 255;
  }
  if (bc > 255) {
   bc = 255;
  }
  int r = fc + random.nextInt(bc - fc);
  int g = fc + random.nextInt(bc - fc);
  int b = fc + random.nextInt(bc - fc);
  return new Color(r, g, b);
 }
}

代码中涉及到一个类RandomChar。代码如下

public class RandomChar {
 private static final String CHAR_ALL = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";

 private static final String CHAR_LOWERCASE = "qwertyuiopasdfghjklzxcvbnm";

 private static final String CHAR_UPPERCASE = "QWERTYUIOPLAKSJDHFGZXCVBNM";

 private static final String NUMBERS = "0123456789";

 private static final String ALL = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";

 private static final String CHAR_SPECIAL_ALL = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM~!@#$%^&*";

 public static final int RANDOM_CHAR_UPPERCASE = 0;

 public static final int RANDOM_CHAR_LOWERCASE = 1;

 public static final int RANDOM_CHAR_ALL = 2;

 public static final int RANDOM_NUMBERS = 3;

 public static final int RANDOM_ALL = 4;

 public static final int RANDOM_SPECIAL_ALL = 5;

 public static String getChars(int MOD, int count) {

  Random r = new Random();

  int i = 0;
  String random_source = null;
  switch (MOD) {
  case RANDOM_CHAR_UPPERCASE:
   random_source = CHAR_UPPERCASE;
   break;
  case RANDOM_CHAR_LOWERCASE:
   random_source = CHAR_LOWERCASE;
   break;
  case RANDOM_CHAR_ALL:
   random_source = CHAR_ALL;
   break;
  case RANDOM_NUMBERS:
   random_source = NUMBERS;
   break;
  case RANDOM_ALL:
   random_source = ALL;
   break;
  case RANDOM_SPECIAL_ALL:
   random_source = CHAR_SPECIAL_ALL;
   break;
  default:
   random_source = CHAR_SPECIAL_ALL;
   break;
  }

  int c = random_source.length();
  String result = "";

  while (i < count) {
   int v = Math.abs(r.nextInt()) % c;
   result += random_source.substring(v, v + 1);
   i++;
  }
  return result;
 }
}

分享到:
评论

相关推荐

    CRC校验码生成工具

    CRC校验码生成工具,CRC校验码生成工具,CRC校验码生成工具

    Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3 最新版

    **Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3详解** 在工业自动化领域,数据通信的正确性和可靠性至关重要。其中,Modbus RTU(远程终端单元)是一种广泛应用的通信协议,它依赖于错误检测机制来确保数据在传输...

    C# CRC 16 校验码生成

    在C#中实现CRC16校验码生成,主要涉及以下几个核心知识点: 1. **CRC原理**:CRC的基本思想是通过附加一个固定长度的校验码来检测数据中的错误。这个校验码是根据数据按位运算后得到的,其计算过程类似于一种除法...

    CRC校验码生成器(exe文件)

    CRC校验码生成器是实现这一功能的工具,通常以可执行文件(exe文件)的形式存在,用户可以简单地双击运行,对输入的报文进行加密和校验。 CRC的工作原理基于多项式除法,具体步骤如下: 1. **选择生成多项式**:...

    CRC16校验码生成工具

    一款CRC16的校验码生成工具,可以自己设置校验码生成多项式,可以对十六进制序列和文件进行校验,得出16位CRC校验码。字符串需要输入ASCii码形式,例如:AE 13 4F 78 0C 90 A0 B1,每两个中间要加空格,当校验多项式...

    LRC校验码生成工具

    在VB中编写LRC校验码生成器,主要是通过编程实现LRC计算算法。LRC的基本原理是对传输数据的每一位进行累加,最后将结果取反得到校验码。具体步骤如下: 1. 初始化校验和:通常设置为0或某个特定值。 2. 遍历数据:...

    Modbus RTU CRC-16校验码生成器CRC_Calc v0.2

    **Modbus RTU CRC-16校验码生成器CRC_Calc v0.2** Modbus RTU(Remote Terminal Unit)是一种广泛应用于工业自动化领域的通信协议,它基于串行通信,提供了一种设备间交换数据的标准方法。在Modbus RTU通信中,为了...

    CRC16校验码生成器

    crc16校验码生成工具,MFC可执行程序

    校验码生成工具软件包

    校验码生成工具软件包

    LRC校验码生成器_LRC校验码生成器_

    在压缩包中的"LRC校验码生成器"很可能是一个完整的程序,包括用户界面和上述的LRC计算逻辑,允许用户输入数据并生成相应的LRC校验码,或者对已有数据进行校验。 总之,LRC校验码是一种简单但有效的错误检测方法,...

    车辆vin校验码生成器.xls

    用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,

    CheckSum校验码生成工具

    将十六进制字符串中的数(长度不限)累加求和,取累加和最低一个字节,生成CheckSum校验码。例如十六进制字符串:01 03 00 10 00 4D 31 30 30 20 32 36 64 42 6D 20 56 31 2E 30,生成CheckSum校验码为92(十六进制)...

    C# 校验码生成程序

    在“C# 校验码生成程序”这个项目中,开发者使用了C#编程语言在Visual Studio 2008环境下创建了一个能够自动生成校验码的工具。这个工具不仅能够生成校验码,还能将生成的校验码转化为图片格式,方便在网页或应用中...

    CRC校验码生成器(v0.2)

    CRC校验码生成器,如"CRC校验码生成器(v0.2)",是一种方便的工具,能够帮助用户自动生成不同类型的CRC校验码。 该软件支持CRC7和CRC16两种常见的CRC校验类型。CRC7常用于一些简单的通信协议和存储设备,如早期的...

    CRC校验码生成说明

    以下是CRC校验码生成过程的详细解释。 首先,我们需要理解CRC校验码函数。CRC校验码函数是一个定义好的二进制多项式,其最高幂决定了生成的CRC校验码的位数。例如,如果要生成一个四位的CRC校验码,我们需要选择一...

    CRC16 校验码生成工具代码

    在标题"CRC16 校验码生成工具代码"中,提到的是一个专门用于生成CRC16校验码的程序或代码库。这类工具通常会提供接口或函数,用户可以输入需要校验的数据,然后工具会根据算法计算出对应的CRC16值。这个工具的特性是...

    Mudbus数据帧CRC校验码生成.zip

    本项目“Mudbus数据帧CRC校验码生成”聚焦于如何在C/C++编程环境下实现CRC-16校验码的计算,特别关注了指针的灵活运用。 CRC校验通过附加一个固定长度的校验码到原始数据后面,使得接收端能够检测出数据在传输过程...

Global site tag (gtag.js) - Google Analytics