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. iOS——为Xcode编译POCO C++静态库

    一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C+ ...

  2. Android布局_相对布局RelativeLayout

    一.RelativeLayout(相对布局)概述 RelativeLayout是相对布局控件,它包含的子控件将以控件之间的相对位置或者子类控件相对父类容器的位置的方式排列 二.RelativeLayo ...

  3. SpringMVC简单构造restful, 并返回json

    https://my.oschina.net/u/2272916/blog/352297

  4. linux下创建管理员组&nbsp;使用&nbsp;su&nbsp;-&nbsp;命令

    通常情况下,用户通过执行“su -”命令.输入正确的root密码,可以登录为root用户来对系统进行管理员级别的配置.但是,为了更进一步加强系统的安全性,有必要建立一个管理员的组,只允许这个组的用户来 ...

  5. 2016-6-15-de novo文献阅读

    准备读四篇denovo的文献: Nature Biotechnology(2015) - Sequencing of allotetraploid cotton (Gossypium hirsutum ...

  6. [转]Android WebView播放视频(包括全屏播放),androidwebview

    Android WebView播放视频(包括全屏播放),androidwebview 最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里 ...

  7. DialogFragment 自定义弹窗

    layout文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:a ...

  8. 和为S的两个数VS和为S的连续正数序列

    其实这个题目如果没有限制时间复杂度的话,那么就很简单了,一遍一遍地扫描吧.时间复杂度肯定就是 O(n2)啰.但是这题目肯定不会这么简单,否则就是小学生的水平了嘛. 其实我刚到这题的时候想到的是用二叉查 ...

  9. 在Fedora 20下使用TexturePacker

    TexturePacker应该是最流行的图片合并工具吧,它把多个小图组合成一个大图,以减少网络请求次数,还有利于内存的充分利用.在游戏开发和网页开发时经常会用到它,CanTK(https://gith ...

  10. ios 给uiview创作遮罩

    mask一定是PNG格式的图像,去掉背景 .jpg格式图片没有alpha values 遮罩是通过图片透明度的信息实现与颜色无关 UIImage*_maskingImage =[UIImage ima ...