应用中验证码的生成方法.
import java.awt.p_w_picpath.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.p_w_picpathio.ImageIO;
import org.apache.commons.lang.RandomStringUtils;
* 随即图片生成器
* 该类用于用户注册时候需要用户根据图片内容进行填写正确后方可注册
* @author Liudong
*/
public class RandomImageGenerator {
//20060320 add by wyx
//因为o和0,l和1很难区分,所以,去掉大小写的o和l
str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz";//初始化种子
return RandomStringUtils.random(6, str);//返回6为的字符串
}
* 根据要求的数字生成图片,背景为白色,字体大小16,字体颜色黑色粗体
* @param num 要生成的数字
* @param out 输出流
* @throws IOException
*/
public static void render(String num, OutputStream out) throws IOException {
if (num.getBytes().length > 6) {
throw new IllegalArgumentException(
"The length of param num cannot exceed 6.");
}
//设定宽度和高度
int width = 130;
// 在内存中创建图象
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics2D g = (Graphics2D) bi.getGraphics();
//画边框
java.util.Random random = new java.util.Random();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
//设置字体
Font mFont = new Font("Tahoma", Font.BOLD, 16);
g.setFont(mFont);
g.setColor(Color.BLACK);//设置字体颜色
//画认证码,每个认证码在不同的水平位置
String str1[] = new String[6];
for (int i = 0; i < str1.length; i++) {
str1[i] = num.substring(i, i + 1);
int w = 0;
int x = (i + 1) % 3;
if (x == random.nextInt(3)) {
w = 19 - random.nextInt(7);
} else {
w = 19 + random.nextInt(7);
}
Color color1 = new Color(random.nextInt(180), random.nextInt(180),
random.nextInt(180));
g.setColor(color1);
g.drawString(str1[i], 20 * i + 10, w);
}
for (int i = 0; i < 100; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
Color color1 = new Color(random.nextInt(255), random.nextInt(255),
random.nextInt(255));
g.setColor(color1); //随即画各种颜色的点
g.drawOval(x, y, 0, 0);
}
//画干扰线
for (int i = 0; i < 5; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
Color color1 = new Color(random.nextInt(255), random.nextInt(255),
random.nextInt(255));
g.drawLine(x, y, x1, y1);
}
//图像生效
g.dispose();
//输出页面
ImageIO.write(bi, "jpg", out);
}
String num = random();
System.out.println(num);
render(num, new FileOutputStream("D:\\test.jpg"));
System.out.println("Image generated.");
}
}
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 用于产生随即图片以防止非法***
* @author Liudong
*/
public class RandomImageServlet extends HttpServlet {
public final static String RANDOM_LOGIN_KEY = "RANDOM_LOGIN_KEY";
System.setProperty("java.awt.headless","true");
}
return (String)req.getSession().getAttribute(RANDOM_LOGIN_KEY);
}
{
HttpSession ssn = req.getSession();
if(ssn!=null) {
String randomString = RandomImageGenerator.random();//生成种子
ssn.setAttribute(RANDOM_LOGIN_KEY,randomString);//将种子放到session里面
res.setContentType("p_w_picpath/jpeg");//设置图像生成格式
}
}
}
<servlet-name>p_w_picpath</servlet-name>
<servlet-class>peopleBlog.RandomImageServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-name>p_w_picpath</servlet-name>
<url-pattern>/verifyCode.jsp</url-pattern>
转载于:https://blog.51cto.com/nxdxt/25148
应用中验证码的生成方法.相关推荐
- java jsp验证码_JSP验证码简单生成方法
本文实例讲述了JSP验证码简单生成方法.分享给大家供大家参考.具体如下: Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = ...
- JSP页面中验证码的调用方法
步骤: 1.首先是要生成验证码 2.对验证码类进行调用:主要 实现的是 将验证码图片 输出到response.getOutputStream()这个输出流中 调用时,可以在页面调用,也可以在serv ...
- android 生成aar文件,Android 中.aar文件生成方法与用法
https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...
- markdown中 文件目录树生成方法
md文件常见的目录树的生成方法 cd 到代码目录 tree /f 然后拷贝 卷 新加卷 的文件夹 PATH 列表 卷序列号为 9CA4-E004 E:. │ .gitignore │ .name │ ...
- struts2中验证码的生成和使用
第一步生产字符串: package com.yancode.demo; import java.util.Arrays; /* * 一步一步来,要生成验证码图片,首先要有验证码,然后才能在画在图片上 ...
- JAVA中随机数的生成方法
一.第一种:使用Math类中的random方法 该方法的返回数值为[0.0,1.0)的double类型数,由于double类数的精度很高,可以在一定程度下看做随机数,借助(int)来进行类型转换就可以 ...
- vs2010中moc文件生成方法
Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件.如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件.这个源文件中包含了 Q_OBJECT ...
- Android 中.aar文件生成方法与用法
https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...
- Revit软件用幕墙工具创建百叶窗及CAD门窗生成方法
Revit软件用幕墙工具创建百叶窗及CAD门窗生成方法 首先,新建轮廓族,如图1-1所示,尺寸根据需要确定,如图: 编辑新建族的类别轮廓类型修改为竖挺如图1-2, 新组类型命名百叶窗如图1-3所示.然 ...
最新文章
- 转投AI?英国这所大学决定裁掉数学系,激怒了菲尔兹奖得主
- 怎样使用Spring Boot项目的单元测试?
- TK:vtkCellTreeLocator用法实战
- 学 Python找不到练手项目?试试这些!
- 【springboot】之自动配置原理
- JavaScript直接导出Excel,Word
- ubuntu如何杀死进程
- 小学生python编程教程-围观~山东省的小学生Python编程入门都学的什么?
- 微信小程序中多个button/view组件中进行切换时改变样式
- Django 【第六篇】ORM跨表操作(聚合查询,分组查询,F和Q查询等)
- Android 手机的坐标
- hp/博科光纤交换机配置小记
- preview一直不显示,无法和代码同步变化
- python模拟人工滑动_pyppeteer 模拟人工滑动验证(一)
- SVN更新(update)文件时,报skipped, remains conficted时的解决办法
- 颠覆虚拟机的神器——WSL来了
- 开源php官方团队解散,php语言大厦将倾?
- mysql utf8mb4 bin_Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci与utf8mb4_unicode_ci的选择...
- 童文、李烨:6G的9大挑战
- Python 中拼音库 PyPinyin 的用法