下面的代码都是抄过来的,不怎么理解,用的时候方便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校验码生成工具
用c++写的一个lrc校验码生成工具
ESN校验码生成软件
一款CRC16的校验码生成工具,可以自己设置校验码生成多项式,可以对十六进制序列和文件进行校验,得出16位CRC校验码。字符串需要输入ASCii码形式,例如:AE 13 4F 78 0C 90 A0 B1,每两个中间要加空格,当校验多项式...
1.C# CRC 16 校验码生成源码; 2.CRC-16 MODBUG; 3.C#写的CRC16检验算法;
Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3 这是最新版,多达21种CRC生成公式。体积小巧,免安装,是程序员工程师必备的神器,巴拉巴拉
校验码生成工具软件包
crc16校验码生成工具,MFC可执行程序
用于汽车等机械第九位校验码的生成,只需要输入前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(十六进制)...
用vb写的一个lrc校验码生成工具,对于使用LRC校验的通讯调试很有帮助。
Modbus RTU CRC-16校验码生成器CRC_Calc v0.2
本软件不包含任何插件,可以放心使用,只作为学习交流用。 功能:1、生成CRC校验码,可选多项式正序和多项式逆序(Modbus校验码)的方式。2、可选是否显示空格,方便复制处理
VS2008 下校验码生成项目,可自动生成校验码,产生图片格式的校验码~~~~~~~~~~~~~~~~~~~~~~~~~~
CRC校验码生成,简单地列举了一个CRC校验码生成的过程,说明CRC生成的过程和原理。希望对大家有用。
CRC循环冗余校验码生成器 ,计算机网络课程作业,有bug,参考,共享。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
如24 4D 73 67……等等数据输入后,自动计算异或校验和
Windows下MD5校验码生成器,可以生成和检验MD5码,下载打开后可直接使用