生成验证码图片

1.contorller层

@RequestMapping("/getSecurityCode") //对应/user/valicode.do请求
@ResponseBody
public UserResult valicode(HttpServletResponse response,HttpSession session){
//利用图片工具生成图片
  try {
    //第一个参数是生成的验证码,第二个参数是生成的图片Object[] objs = ImageUtil.createImage();//将验证码存入Sessionsession.setAttribute("imageCode",objs[0]);
   //将图片输出给浏览器log.info("------图片session----"+objs[0]);BufferedImage image = (BufferedImage) objs[1];response.setContentType("image/png");OutputStream os = response.getOutputStream();ImageIO.write(image, "png", os);return UserResult.ok(null, "ok");} catch (Exception e) {e.printStackTrace();log.info(e.fillInStackTrace());return UserResult.error(ToolString.exception, "验证码生成异常!");}
}

2.ImageUtil工具类

package com.soshare.util;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;import javax.imageio.ImageIO;public class ImageUtil {// 验证码字符集private static final char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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'};// 字符数量private static final int SIZE = 4;// 干扰线数量private static final int LINES = 5;// 宽度private static final int WIDTH = 80;// 高度private static final int HEIGHT = 40;// 字体大小private static final int FONT_SIZE = 30;/*** 生成随机验证码及图片* Object[0]:验证码字符串;* Object[1]:验证码图片。*/public static Object[] createImage() {StringBuffer sb = new StringBuffer();// 1.创建空白图片BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);// 2.获取图片画笔Graphics graphic = image.getGraphics();// 3.设置画笔颜色
        graphic.setColor(Color.LIGHT_GRAY);// 4.绘制矩形背景graphic.fillRect(0, 0, WIDTH, HEIGHT);// 5.画随机字符Random ran = new Random();for (int i = 0; i <SIZE; i++) {// 取随机字符索引int n = ran.nextInt(chars.length);// 设置随机颜色
            graphic.setColor(getRandomColor());// 设置字体大小graphic.setFont(new Font(null, Font.BOLD + Font.ITALIC, FONT_SIZE));// 画字符
            graphic.drawString(chars[n] + "", i * WIDTH / SIZE, HEIGHT*2/3);// 记录字符
            sb.append(chars[n]);}// 6.画干扰线for (int i = 0; i < LINES; i++) {// 设置随机颜色
            graphic.setColor(getRandomColor());// 随机画线
            graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT),ran.nextInt(WIDTH), ran.nextInt(HEIGHT));}// 7.返回验证码和图片return new Object[]{sb.toString(), image};}/*** 随机取色*/public static Color getRandomColor() {Random ran = new Random();Color color = new Color(ran.nextInt(256), ran.nextInt(256), ran.nextInt(256));return color;}//验证码是否正确public static boolean validate(String code,String session) {if(!Tool.isNotNull(code)||!Tool.isNotNull(session)) {return false;}code = code.toUpperCase();session = session.toUpperCase();return code.equals(session);}public static void main(String[] args) throws IOException {Object[] objs = createImage();BufferedImage image = (BufferedImage) objs[1];OutputStream os = new FileOutputStream("d:/1.png");ImageIO.write(image, "png", os);os.close();}}

转载于:https://www.cnblogs.com/qzg3362/p/8471385.html

生成4位验证码(后台)相关推荐

  1. python随机生成四位验证码的代码_Python random随机生成6位验证码示例代码

    随机生成6位验证码代码 # -*- coding: utf-8 -*- import random def generate_verification_code(): ''' randomly gen ...

  2. js随机生成4位验证码

    方法一: /*随机生成4位验证码*//*step1:将所有字母,数字装入一个数组备用*/var codes=[];//数字:48-57;unicode编码for(var i=48;i<57;co ...

  3. python随机数生成验证码_Python随机数random模块学习,并实现生成6位验证码

    一.前言 学习python随机数random模块的使用 ,并使用模块中的函数,实现6位验证码生成 二.random模块 1.random.random() 返回0-1直接的随机数,类型为float & ...

  4. random随机生成5位验证码(数字、大写字母、小写字母)

    random模块即可 # random.randrange(start,end) # 生成一个从start到 end-1 范围的整数 # random.randint(start,end) # 生成一 ...

  5. js随机生成4位验证码(包括数字英文大小写)

    html部分 验证码<input type="text" value="" id="txt" /><input type= ...

  6. python生成4位验证码_Python 生成4位验证码图片

    import random import string from PIL import Image,ImageDraw,ImageFont,ImageFilter # 字体的位置 font_path ...

  7. python生成4位验证码random_python 生成验证码很简单:random和srting的方法

    介绍random和string的有关用法,基础的. sting:------------------获取到0-9十个数字和26个小写大写字母,一共62个. string.printable: > ...

  8. Java——随机生成4位验证码,由用户输入并验证是否输入正确,如果输入错误就生成新的验证码让用户重新输入,最多输入5次

    引入包: import java.util.Scanner; import java.util.Random; main函数: public static void main(String[] arg ...

  9. python生成6位验证码随机数,需包含英文字母大写、小写和数字(含代码和注释)

    具体见代码和注释: def get_code():code_list = []# for i in range(10): # 0~9for i in range(48,57): #ASCII表示的数字 ...

最新文章

  1. 跨学科整合,打造大数据最强集团军:清华大学大数据能力提升项目宣讲会来了!...
  2. 使用WinSCP在WIndows与树莓派之间传递文件
  3. taro 重新加载小程序_taro-music一款开源网易云音乐小程序
  4. 再见XShell!这款国产终端更好用!
  5. Java深入研究_Java深入研究【1、object类】
  6. 动态可订制属性的 PropertyGrid(转载)
  7. 点击列表高亮_HTML5 标签列表
  8. ubuntu 下重装mysql若干问题
  9. 2017.10.16 水管局长水管局长数据加强版 思考记录
  10. clob mybatis_spring + mybatis 存取clob
  11. Pandas DataFrame GroupBy.Apply
  12. Exchange误删除邮箱用户后恢复账户问题
  13. 了解 Promise.any() 用法
  14. win7清理系统后,音频设备被禁用,没有声音
  15. hibernate 教程 笔记
  16. access无法 dolby_Win10专业版装不了dolby该怎么办?Win10 dolby音效驱动安装教程
  17. python 爬取海量网易云评论并写入数据库
  18. 一牛网:最新6月手机综合性能评测
  19. 元宇宙到底是什么?让我们来看看科技达人们是怎么讲的。
  20. [Ubuntu] Ubuntu16.04+win10+联想Y7000+显卡+WIFI 装机成功

热门文章

  1. python的安装教程-python安装教程
  2. python基础知识点总结-Python基础知识总结
  3. python读取excelsheet-python读取excel文件中所有sheet表格
  4. python到底可以做什么-Python到底可以做什么?
  5. python代码大全o-python文件编码及执行
  6. python要学多久-零基础python培训需要学多久?
  7. 疯狂python讲义视频 百度云-疯狂Python讲义 PDF 含源码工具版
  8. python for-Python for循环及基础用法详解
  9. python基础知识梳理-Python基础知识梳理 - 第03部分
  10. python语言入门教程-菜鸟学Python入门教程大盘点|7个多月的心血总结