都说算法程序的灵魂,在一个工程项目中有时会用到很多的算法,算法的好坏很大程度上对程序的运行效率和代码的冗余度有很重要的影响。在本练习中用到了一个很简单的算法,这个程序的目的是模仿web页面中常出现的验证码问题,每次刷新都是不一样的验证码。此代码是站在servlet的角度写到浏览器中的。
代码示例:
package cn.wwh.www.web.response;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.Test;
/**
*类的作用:产生四个随机数,1,3是数字2,4位是英文字母
*
*
*@author 一叶扁舟
*@version 1.0
*@创建时间: 2014-7-28 下午07:44:32
*/
public class RandomNum extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在内存中创建一个图片
BufferedImage bi = new BufferedImage(65, 40,BufferedImage.TYPE_INT_ARGB);
//获得内存图片的画笔
Graphics gp = bi.getGraphics();
// 设置字体的样式和大小
gp.setFont(new Font("黑体",Font.BOLD,20));
//设置字体的颜色
gp.setColor(Color.red);
//向内存图片绘制字体
gp.drawString(getRandChar(), 10, 30);
//将图片写出到浏览器
ImageIO.write(bi, "jpg", response.getOutputStream());
}
public String getRandChar() {
String str = "1234567890abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int len = str.length();
String randChar = "";
for (int i = 0; i < 4; i++) {
if (i % 2 == 0) {
while (true) {
Random ran = new Random();
int indext = ran.nextInt(len);
String ch = str.substring(indext, indext + 1);
System.out.println(i+":"+ch);
if (ch.matches("[0-9]")) {
randChar += ch;
break;
}
}
} else {
while (true) {
Random ran = new Random();
int indext = ran.nextInt(len);
String ch = str.substring(indext, indext + 1);
System.out.println(i+":"+ch);
if (ch.matches("[a-zA-Z]")) {
randChar += ch;
break;
}
}
}
}
System.out.println("最后的四个字符;"+randChar);
return randChar;
}
}
测试代价效果图:
浏览器中的效果图:
控制台的输出结果图;
原文地址:http://blog.csdn.net/u011662320/article/details/38277851