生成带干扰线的验证码

2023-11-19

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.yitong.commons.model.SessConsts;
@Controller
public class ImageCode {
 private Logger logger = Logger.getLogger(this.getClass());
 private final int width = 60;
 private final int height = 20;
 private final int codeCount = 4;
 private final int x = width / (codeCount + 1);
 private final int fontHeight = height - 2;
 private final int codeY = height - 4;
 final char[] codeSequence = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
   '9' };
 
 @RequestMapping("/xxxx/xxxxxxx")
 public void execute(HttpServletRequest request, HttpServletResponse response) {
  try {
   BufferedImage buffImg = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);
   Graphics2D g = buffImg.createGraphics();
   Random random = new Random();
  
   buffImg = g.getDeviceConfiguration().createCompatibleImage(width,
     height, Transparency.TRANSLUCENT);
   g.dispose();
   g = buffImg.createGraphics();
 
   
   // g.setColor(Color.WHITE);
   // g.fillRect(0, 0, width, height);
   
   Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
 
   g.setFont(font);
   g.setColor(Color.BLACK);
   
   for (int i = 0; i < 8; i++) {
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(12);
    int yl = random.nextInt(12);
    g.drawLine(x, y, x + xl, y + yl);
   }
   
   StringBuffer randomCode = new StringBuffer();
   int red = 0, green = 0, blue = 0;
   for (int i = 0; i < codeCount; i++) {
    String strRand = String
      .valueOf(codeSequence[random.nextInt(10)]);
   
    red = random.nextInt(100);
    green = random.nextInt(155);
    blue = random.nextInt(100);
 
    g.setColor(new Color(155 + red, green, 155 + blue));
    g.drawString(strRand, (i + 1) * x, codeY);
   
    randomCode.append(strRand);
   }
   HttpSession session = request.getSession();
   session.setAttribute(SessConsts.IMG_CODE, randomCode.toString());
   response.setHeader("Pragma", "no-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.setDateHeader("Expires", 0);
   response.setContentType("image/png");
   ServletOutputStream sos = response.getOutputStream();
   ImageIO.write(buffImg, "png", sos);
// sos.close();
   sos.flush();
  } catch (Exception e) {
   logger.error("error", e);
  }
 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成带干扰线的验证码 的相关文章

  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring

随机推荐

  • InputStream、 FileInputStream 、BufferInputStream 、 InputStreamreader 、 BufferedReader的不同

    InputStream FileInputStream InputStream 是一个抽象类 定义了所有字节输入流类的 公用方法 FileInputStream类是它的子类 我们通过FileInputStream类 读取硬盘上的文件 存到内
  • vue/cli3添加自定义icon图标

    1 从阿里巴巴矢量图表库将需要的图标 加入购物车 点击购物车 2 选择添加至项目 3 下载到本地 放到项目中 4 在main js中引入iconfont css文件 以实际位置为准 import assets fonts download
  • JS/jQuery添加和移除CSS样式

    有时候需要添加CSS样式和移除CSS样式 如添加display属性 设为隐藏 有时候需要移除display属性 一 jQuery移除CSS样式的两种方法 注意 当其中一种不支持时 就尝试另一种 show removeAttr style s
  • VC6.0向工程中添加文件和打开文件出错“"0x5003eaed"指令引用的"0x00000000"内存”解

    据说这个错误是因为和微软的其他软件相冲突了 下面就看看如何解决这个问题 第一步 下载一个FileTool插件 下载的地址 http download microsoft com download vc60ent s1 6 0 w9xnt4
  • 服务器远程桌面连接不上(远程桌面连接服务器之超级VPS管理器)

    有时候我们需要使用远程桌面连接来操作另外一台电脑 但最近有Win7系统用户反映 电脑开启了远程桌面连接功能后 无法连接到远程桌面 遇到这个问题该怎么办呢 下面就为大家介绍Win7系统连接不上远程桌面的解决方法 一般情况下 对Win7的远程连
  • Oracle 中只查到一条记录就返回

    使用 rownum 关键字 select from T SYS USER where rownum lt 1
  • E9流程节点表分析

    E9流程节点表分析 流程节点分析 流程节点分析 新建流程审批节点时节点信息会存储到数据库 SELECT FROM workflow nodebase 流程节点表 ISREJECT 0为不可以退回 1为可以退回 ISSTAR 1 为开始节点
  • ​什么是晶振?晶振是怎么制成的?晶振的内部结构,晶振的工作应用以及影响晶振频率相关的参数介绍

    什么是晶振 定义 晶振一般指石英晶体振荡器 也叫晶体振荡器 晶体振荡器是一种使用逆压电效应的电子振荡器电路 即当电场施加在某些材料上时 它会产生机械变形 因此 它利用压电材料的振动晶体的机械共振来产生具有非常精确频率的电信号 晶体振荡器具有
  • Spring的IOC原理[通俗解释一下]

    1 IoC理论的背景 我们都知道 在采用面向对象方法设计的软件系统中 它的底层实现都是由N个对象组成的 所有的对象通过彼此的合作 最终实现系统的业务逻辑 图1 软件系统中耦合的对象 如果我们打开机械式手表的后盖 就会看到与上面类似的情形 各
  • Power BI:切片器联动的一些问题

    问题1 联动切片器选中子项后父项未能显示全部 如下所示 切片器原始状态为 Province和City来源同一张表 当选中了City中的某一项时 变为 父项也发生了变化 但我们希望无论子项选择什么 父项应该始终显示全部 解决办法 City切片
  • javaweb本地启动很快,服务器上面启动特别慢

    在JVM环境中解决 打开 JAVA PATH jre lib security java security这个文件 找到下面的内容 securerandom source file dev urandom替换成 securerandom s
  • 卷麻了,00后测试用例写的比我还好,简直无地自容......

    经常看到无论是刚入职场的新人 还是工作了一段时间的老人 都会对编写测试用例感到困扰 例如 如何编写测试用例 作为一个测试新人 刚开始接触测试 对于怎么写测试用例很是头疼 无法接触需求 只能站在用户角度去做测试 但是这样情况会导致不能全方位测
  • python中深拷贝与浅拷贝的详细解释

    在Python中 当我们对一个对象进行拷贝时 有两种方式 浅拷贝和深拷贝 浅拷贝创建了一个新的对象 其中包含原始对象的引用 而深拷贝则创建了一个完全独立的新对象 其中包含原始对象所有数据的副本 这意味着在原始对象和拷贝对象之间进行更改时 浅
  • 小记 Java stream 中 peek()

    peek 函数 接受一个函数作为参数 这个函数会被应用到每个元素上 并将结果元素映射成一个新的元素 相比于类似 foreach 更类似于lambda中的map函数 map函数 接受一个函数作为参数 这个函数会被应用到每个元素上 并将返回值映
  • ElementUI的自定义模板

    ElementUI自定义模板的使用 前言 一 ElementUI的Input重要属性 二 使用步骤 1 上实例 转自Element官网 2 介绍几个重要参数方法 3 基于以上的介绍 做一个带提示的搜索输入框 总结 前言 ElementUI对
  • 一个java程序员4年4个工作的经历

    今天看到一个帖子说程序员怎么提升自己的技能 里面说了十多项 对自己感觉能有用的有以下几点 读书 读代码 读博客 写博客 回答别人的问题 参加一个开源项目 参加培训 研讨会 回答问题当中给自己的思考 一个毕业生 做java转正了4k 一个室友
  • 为什么要选择云原生数据库

    为什么要选择云原生数据库 前言 1 传统数据库 1 1 传统数据库概念 1 2 传统数据库优缺点 1 2 1 优点 1 2 2 缺点 2 云原生数据库 2 1 云原生数据库概念 2 2 云化代表未来 2 3 云原生数据库的优势 2 3 1
  • 【MATLAB】字符串的处理及矩阵的初步学习

    欢迎访问我的个人网站 reality2ideal xyz 内容在CSDN和个人网站上同步更新 字符串处理 字符串矩阵 gt gt ch 123456 qwerty ch 2 6 char 数组 123456 qwerty 字符串矩阵的列数要
  • 转载:R语言绘图—图形标题、坐标轴设置

    R语言绘图是通过函数命令及相应参数设置实现的 如plot x y plot为绘图函数命令 x y则是绘图参数 指定了绘图的数据向量 但这种最基本的绘图设置很难满足个性化绘图的要求 我们需要根据需要对图形元素进行设置 图形元素是各类图形的基本
  • 生成带干扰线的验证码

    import java awt Color import java awt Font import java awt Graphics2D import java awt Transparency import java awt image