下面的代码都是抄过来的,不怎么理解,用的时候方便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校验码生成工具
**Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3详解** 在工业自动化领域,数据通信的正确性和可靠性至关重要。其中,Modbus RTU(远程终端单元)是一种广泛应用的通信协议,它依赖于错误检测机制来确保数据在传输...
在C#中实现CRC16校验码生成,主要涉及以下几个核心知识点: 1. **CRC原理**:CRC的基本思想是通过附加一个固定长度的校验码来检测数据中的错误。这个校验码是根据数据按位运算后得到的,其计算过程类似于一种除法...
CRC校验码生成器是实现这一功能的工具,通常以可执行文件(exe文件)的形式存在,用户可以简单地双击运行,对输入的报文进行加密和校验。 CRC的工作原理基于多项式除法,具体步骤如下: 1. **选择生成多项式**:...
一款CRC16的校验码生成工具,可以自己设置校验码生成多项式,可以对十六进制序列和文件进行校验,得出16位CRC校验码。字符串需要输入ASCii码形式,例如:AE 13 4F 78 0C 90 A0 B1,每两个中间要加空格,当校验多项式...
在VB中编写LRC校验码生成器,主要是通过编程实现LRC计算算法。LRC的基本原理是对传输数据的每一位进行累加,最后将结果取反得到校验码。具体步骤如下: 1. 初始化校验和:通常设置为0或某个特定值。 2. 遍历数据:...
**Modbus RTU CRC-16校验码生成器CRC_Calc v0.2** Modbus RTU(Remote Terminal Unit)是一种广泛应用于工业自动化领域的通信协议,它基于串行通信,提供了一种设备间交换数据的标准方法。在Modbus RTU通信中,为了...
crc16校验码生成工具,MFC可执行程序
校验码生成工具软件包
在压缩包中的"LRC校验码生成器"很可能是一个完整的程序,包括用户界面和上述的LRC计算逻辑,允许用户输入数据并生成相应的LRC校验码,或者对已有数据进行校验。 总之,LRC校验码是一种简单但有效的错误检测方法,...
用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,
将十六进制字符串中的数(长度不限)累加求和,取累加和最低一个字节,生成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#编程语言在Visual Studio 2008环境下创建了一个能够自动生成校验码的工具。这个工具不仅能够生成校验码,还能将生成的校验码转化为图片格式,方便在网页或应用中...
CRC校验码生成器,如"CRC校验码生成器(v0.2)",是一种方便的工具,能够帮助用户自动生成不同类型的CRC校验码。 该软件支持CRC7和CRC16两种常见的CRC校验类型。CRC7常用于一些简单的通信协议和存储设备,如早期的...
以下是CRC校验码生成过程的详细解释。 首先,我们需要理解CRC校验码函数。CRC校验码函数是一个定义好的二进制多项式,其最高幂决定了生成的CRC校验码的位数。例如,如果要生成一个四位的CRC校验码,我们需要选择一...
在标题"CRC16 校验码生成工具代码"中,提到的是一个专门用于生成CRC16校验码的程序或代码库。这类工具通常会提供接口或函数,用户可以输入需要校验的数据,然后工具会根据算法计算出对应的CRC16值。这个工具的特性是...
本项目“Mudbus数据帧CRC校验码生成”聚焦于如何在C/C++编程环境下实现CRC-16校验码的计算,特别关注了指针的灵活运用。 CRC校验通过附加一个固定长度的校验码到原始数据后面,使得接收端能够检测出数据在传输过程...