import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random; import javax.imageio.ImageIO; public class Test { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//用于随机生成验证码的字符串集
String[] strs = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"
,"S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j"
,"k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1"
,"2","3","4","5","6","7","8","9"};
//随机生成干扰线的纵坐标y1和y2
Random y1Random = new Random();
Random y2Random = new Random();
int y1 = y1Random.nextInt(31);
int y2 = y2Random.nextInt(31); //随机生成用于组成验证码的字符串所在集的下标值
Random code1Random = new Random();
Random code2Random = new Random();
Random code3Random = new Random();
Random code4Random = new Random();
int code1Index = code1Random.nextInt(62);
int code2Index = code2Random.nextInt(62);
int code3Index = code3Random.nextInt(62);
int code4Index = code4Random.nextInt(62); //随机生成rgb颜色
Random rRandom = new Random();
Random gRandom = new Random();
Random bRandom = new Random();
int r = rRandom.nextInt(256);
int g = gRandom.nextInt(256);
int b = bRandom.nextInt(256);
Color color = new Color(r, g, b); //拼接成完整字符串
String codeString = strs[code1Index] + strs[code2Index] + strs[code3Index] + strs[code4Index]; //定义一个宽70像素,高30像素的jpg图片
BufferedImage bi = new BufferedImage(70, 30, BufferedImage.TYPE_INT_RGB);
//定义graphis绘画对象
Graphics2D graphics2d = bi.createGraphics();
graphics2d.setBackground(Color.WHITE);
graphics2d.setColor(color);
graphics2d.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20));
graphics2d.clearRect(0, 0, 70, 30);
       //绘制干扰线
graphics2d.drawLine(0, y1, 70, y2); //居中绘制字符串
FontMetrics fontMetrics = graphics2d.getFontMetrics();
int stringWidth = fontMetrics.stringWidth(codeString);
int stringAscent = fontMetrics.getAscent();
int xCode = 70 / 2 - stringWidth / 2;
int yCode = 30 / 2 + stringAscent / 2;
graphics2d.drawString(codeString, xCode, yCode); //输出图片
File file = new File("C:\\Users\\zhengbing\\Desktop\\image.jpg");
ImageIO.write(bi, "jpeg", file);
} }

最后可以返回校验字符串codeString,来达到验证的功能

使用AWT组件实现验证码功能的更多相关文章

  1. 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)

    本篇紧接着上一篇文章[一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面] 验证码功能 一般验证码功能实现方式为,前端界面访问一个url请求,后端服务代码生成一个图片流返回至浏览器 ...

  2. .NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

    前面为了方便我们只是简单实现了基本业务功能的增删改查,但是登录功能还没有实现,而登录又是系统所必须的,得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能.今天我将带着大家一起来 ...

  3. Servlet案例3:验证码功能

    这里介绍简单的验证码功能 动态生成图片 一个简单的页面: <!DOCTYPE html> <html> <head> <meta charset=" ...

  4. S2SH框架中的无刷新验证码功能实现

    暑假期间在实验室做使用S2SH框架的项目,其中登录和注册需要验证码,实现了一个没有实现刷新验证码功能的简单版本,代码如下: 1 package com.sem.action; 2 3 import j ...

  5. java实现验证码功能

    java实现验证码功能 通过java代码实现验证码功能的一般思路: 一.通过java代码生成一张验证码的图片,将验证码的图片保存到项目中的指定文件中去,代码如下: package com.util; ...

  6. Java AWT组件开发和Swing界面编程

    一.AWT组件开发 1.AWT AWT是抽象窗口工具箱的缩写,它为编写图形用户界面提供了用户接口,通过这个接口就可以继承很多方法,省去了很多工作.AWT还能使应用程序更好地同用户进行交互. AWT中的 ...

  7. JavaFX+SpringBoot+验证码功能的小型薪酬管理系统

    2020.07.22更新 1 概述 1.1 简介 一个简单的小型薪酬管理系统,前端JavaFX+后端Spring Boot,功能倒没多少,主要精力放在了UI和前端的一些逻辑上面,后端其实做得很简单. ...

  8. java-GUI编程之AWT组件

    AWT中常用组件 基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Che ...

  9. dd——留言板再加验证码功能

    1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表  这个不要碰, ...

随机推荐

  1. C++——并发编程

    一.高级接口:async()和Future 1.1 async()和Future的第一个用例 假设需要计算两个操作数的总和,而这两个操作数是两个函数的返回值.寻常加法如下: func1() + fun ...

  2. 转 java List 与ArrasyList 区别

    转 List是一个接口,而ListArray是一个类, ListArray继承并实现了List. 为什么要用 List list = new ArrayList() ,而不用 ArrayList al ...

  3. samba服务器搭建

    为实现windows与linux资源共享,搭建一个samba服务器:这个我也是探索了一段时间. 找到一篇写得比较清楚的博客: http://yangxuejun.blog.51cto.com/6239 ...

  4. mysql使用笔记(三)

    一.数值类型 1. 数值类型     标准sql中包含数据类型 INTEGER, SMALLINT, DECIMAL, NUMERIC,以及FLOAT, REAL, DOUBLE.mysql在此基础上 ...

  5. Hbase之取出行数据指定部分(类似MySQL的Limit)

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScanner; import org. ...

  6. js倒计时天时分秒[转]

    <script language="JavaScript"> <!-- // function getQueryString(name) { var reg =n ...

  7. Selenium Grid Configuration

    Start Hub and Node with Json config 1. Start Hub with json config file title HubWebDriver java -jar ...

  8. OI中的代码调试

    作为一位OIer,代码调试的能力必不可少. 今天梳理一下自己进行代码调试的方法,下面只是一些个人的总结. 代码的评价有三部分: 正确性 强健性 高效性 检查也应该从这三部分出发. [正确性] 打完代码 ...

  9. 如何查看连接mysql的ip地址

    select SUBSTRING_INDEX(host,':',1) as ip , count(*) from information_schema.processlist group by ip;

  10. Pictures of Ascii Art

    简述 指尖上的艺术 - 通过键盘上韵律般的敲敲打打,一幅幅美轮美奂的艺术作品便跃然于屏. 这样的画作,包含了无穷的创意,糅合了现代计算机科技与传统绘画艺术,难道还有比这更令人陶醉的美妙事物吗? 简述 ...