java实现简单验证码生成
作者:KD-倘若没有倘若 发布时间:2022-06-02 10:05:09
标签:java,验证码
本文实例为大家分享了java验证码生成的具体代码,供大家参考,具体内容如下
简单验证码java实现--servlet类生成 验证码img,并写入session
老师给的源码,在此做个记录,简单验证码,java绘图
在此鸣谢并附上源码:.
//
package app61;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
public class VerifyCode extends HttpServlet {
private Font mFont = new Font("Times New Roman", Font.PLAIN, 18); //设置字体
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//取得一个1000-9999的随机数
HttpSession session = request.getSession(true);
response.setContentType("image/gif");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
int width = 60, height = 20;
ServletOutputStream out = response.getOutputStream();
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB); //设置图片大小的
Graphics gra = image.getGraphics();
Random random = new Random();
gra.setColor(getRandColor(200, 250)); //设置背景色rand垫底
gra.fillRect(0, 0, width, height);
gra.setColor(Color.black); //设置字体色
gra.setFont(mFont);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
gra.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
gra.drawLine(x, y, x + xl, y + yl);
}
// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 将认证码显示到图象中
gra.setColor(new Color(20 + random.nextInt(110),
20 + random.nextInt(110),
20 + random.nextInt(110))); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
gra.drawString(rand, 13 * i + 6, 16);
}
session.setAttribute("rand",sRand);
// session.setAttribute("getImg", sRand);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
static Color getRandColor(int fc, int bc) { //给定范围获得随机颜色
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
//Clean up resources
public void destroy() {
}
}
来源:https://blog.csdn.net/weixin_42692989/article/details/89556291#java_7
0
投稿
猜你喜欢
- 使用RedisTemplate根据前缀获取key列表我们在使用 Redis 的时候,会需要获取以某个字符串开头的所有 key批量获取 key
- 递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递
- 本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下摄像机镜头跟随鼠标移动,并限制上下左右的移
- 前言这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲解static,static成员变量的初始化会在
- 一、百度百科Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防
- @ConditionalOnProperty作用及用法在spring boot中有时候需要控制配置类是否生效,可以使用@Conditiona
- 使用到Process和Runtime两个类,返回值通过Process类的getInputStream()方法获取package ark;im
- 笔者近2天在 Android Studio上玩了一下百度地图,碰到了常见的"230错误 APP Scode校验失败",下
- 编写按钮属性首先再values/themes 或者values/style在文件下编写按钮属性buttonBarPositiveButton
- 本文主要介绍了java(包括springboot)读取resources下文件方式实现,分享给大家,具体如下:1、使用项目内路径读取,该路径
- WPF实现 Gitee泡泡菜单框架使用大于等于.NET40;Visual Studio 2022;项目使用 MIT 开源
- 本文实例为大家分享了Java操作qq邮箱发送邮件的具体代码,供大家参考,具体内容如下今天尝试了使用QQ邮箱的POP3/IMAP/SMTP/E
- 1. 概述锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程获取同一个锁的线程发送消息。锁在实际使用时只
- 大家好,这是 [C#.NET 拾遗补漏] 系列的第 07 篇文章。在 C# 中,大多数方法都是通过 return 语句立即把程序的控制权交回
- javax.el.ELException的解决方式failed to parse the expression [${xxx}]Tomcat
- 本文实例讲述了Android自定义ViewPager的方法。分享给大家供大家参考,具体如下:package com.rong.activit
- 本文实例讲述了Java实现数据库连接池的方法。分享给大家供大家参考。具体如下:package com.kyo.connection;impo
- ArratList 类:存放同一数据类型容器(只能为引用数据类型,因实际其内部存放的是地址)1.导入其所在包import java.util
- 目录1、在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。2、如下Java语句 double x=2.0; int y=4
- 本文实例讲述了C#编程实现获取文件夹中所有文件的文件名。分享给大家供大家参考,具体如下:想实现这样一个功能:批量修改一个目录所有jpg文件的