小标
2018-10-17
来源 :
阅读 1448
评论 0
摘要:本文主要向大家介绍了机器人之JAVA随机生成验证码(一),通过具体的内容向大家展现,希望对大家学习机器人有所帮助。
本文主要向大家介绍了机器人之JAVA随机生成验证码(一),通过具体的内容向大家展现,希望对大家学习机器人有所帮助。
图片验证码原理:</b>服务器生成包含随机字符的字符串图片发给客户端,客户端提交数据需要填写字符串作为验证。而字符串保存在图片中,机器难以识别,达到防止有人利用程序恶意发送信息的目的。
JAVA随机生成图片
JAVA随机生成图片步骤如下:
创建图片缓存区 传参为宽高和图片类型
BufferedImage bi = new
BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
获取画笔并绘画
Graphics g = bi.getGraphics(); //获取画笔
g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体
g.setColor(color);//设置画笔颜色
g.fillRect(0, 0, width, height); //绘制背景
输出图片
ImageIO.write(bi, "JPG", resp.getOutputStream());
JAVA实现验证码实例
servlet生成验证码图片源码
package com.javaweb.respones;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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;
public class IdentityServlet extends HttpServlet{
// 设置字符
public static final char[] chars="1234567890QWERTYUIOPASDFGHJKLZXCVBNM".toCharArray();
// 设置随机数
public static Random random = new Random();
// 获取4位随机数
public static String getRandomString(){
StringBuffer buffer = new StringBuffer();
int index; //获取随机chars下标
for(int i=0;i<4;i++){
index = random.nextInt(chars.length); //获取随机chars下标
buffer.append(chars[index]);
}
return buffer.toString();
}
// 获取随机颜色
public static Color getRandomColor(){
return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
}
// 返回某颜色的反色
public static Color getReverseColor(Color c){
// 防止反色和原色相近
if(c.getRed()<130&&c.getRed()>125 && c.getBlue()<130&& c.getBlue()>125 &&
c.getGreen()<130&&c.getGreen()>125){
return new Color(255,255,255);
}else{
return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String code = getRandomString(); //获取随机验证码
req.getSession().setAttribute("code", code); //放入Session
int width = 100; //图片宽度
int height = 30; //图片高度
Color color = getRandomColor(); //随机色,用于背景色
Color reverse = getReverseColor(color); //反色,用于前景色
/**
* 生成带字符串的文本图片
*/
// 1.创建图片缓存区 传参为宽高和图片类型
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// 2.获取画笔并绘画
Graphics g = bi.getGraphics();
g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体
g.setColor(color);//设置画笔颜色
g.fillRect(0, 0, width, height); //绘制背景
g.setColor(reverse); //设置画笔颜色
g.drawString(code, 18, 20); //绘制字符
// 设置最多100个噪音点
for(int i=0,n = random.nextInt(100);i<n;i++){
g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
}
// 3.输出图片
ImageIO.write(bi, "JPG", resp.getOutputStream());
}
}
生成图片验证码主要应用随机数生成器Random生成随机颜色绘制背景,取反色*绘制字符,并绘制最多100随机位置的噪音点,增加识别难度。
配置XML
<servlet>
<servlet-name>IdentityServlet</servlet-name>
<servlet-class>com.javaweb.respones.IdentityServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IdentityServlet</servlet-name>
<url-pattern>/servlet/IdentityServlet</url-pattern>
</servlet-mapping>
html展示页面
<head>
<script type="text/javascript">
function reloadImage(){
document.getElementById('btn').disable=true;
document.getElementById('identity').src='servlet/IdentityServlet?time='
+new Date().getTime();
}
</script>
</head>
<body>
<img src = "servlet/IdentityServlet" id="identity" ="btn.disabled= false;">
<input type="button" value="换个图片" ="reloadImage()" id="btn">
</body>
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能智能机器人频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号