随机验证码的生成
程序员文章站
2022-07-14 13:17:40
...
随机验证码的生成
我们先新建了一个CaptcheController的类用来显示验证码
然后我们还需要一个StrUtil的一个randomStr方法来产生随机数
public static String randomStr(int count)
{
Random rnds = new Random();
StringBuilder stringBuilder=new StringBuilder();
//str用来存放随机数
String str="abcdefghijklmnpqrstuvwxy0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
//用一个循环去随机去str字符串里的字符
for(int i=0;i<count;i++)
{
int pos = rnds.nextInt(str.length());
stringBuilder.append(str.substring(pos,pos+1));
}
return stringBuilder.toString();
}
随机验证码显示
在CaptcheController类中新建了一个用来显示二维码的方法
private final int WIDTH=100;
private final int HEIGHT=80;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletOutputStream sos = resp.getOutputStream();
//通过调用StrUtil.randomStr(4)来产生随机数,传入你想产生随机数的数量。
String str=StrUtil.randomStr(4);
//通过调用GeneratePic函数来产生随机数
ImageIO.write(GeneratePic(100,80,str),"JPEG",sos);
sos.flush();
sos.close();
}
产生验证码的函数如下
private BufferedImage GeneratePic(int width,int height,String str){
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
Graphics g=image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
Random rnd=new Random();
g.setFont(new Font("宋体",Font.BOLD,20));
// Color color= new Color(100,100,100);
Color color= new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256));
g.setColor(color);
int base= WIDTH / str.length();
for(int i=0;i<str.length();i++){
String s= str.substring(i,i+1);
int x= i*base + rnd.nextInt(base-5);
int y=15+rnd.nextInt(HEIGHT-20);
g.drawString(s,x,y);
}
// int p=rnd.nextInt(2)+3;
return image;
}
完成以上几个步骤就可以对验证码的进行基本的生成了
上一篇: 黑客帝国里的代码雨
下一篇: Python仿黑客帝国代码雨