1、java 验证码生成与校验原理:

后台生辰验证码图片,将图片传到前台;
后台在session中保存验证码内容;
前台输入验证码后传到后台在后台取出session保存的验证码进行校验。

2、图片生成(创建图片 + 创建随机数):

生成图片工具类:调用工具类中的getRandcode方法 生成验证码(方法中自动把验证码值存进session中)每次点击图片重新刷新验证码
界面初次加载时,调用getVerify()方法即可。
代码:

public class RandomValidateCodeUtil {public static final String RANDOMCODEKEY= "RANDOMVALIDATECODEKEY";//放到session中的keyprivate String randString = "0123456789";//随机产生只有数字的字符串 private String//private String randString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生只有字母的字符串//private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生数字与字母组合的字符串private int width = 95;// 图片宽private int height = 25;// 图片高private int lineSize = 40;// 干扰线数量private int stringNum = 4;// 随机产生字符数量private static final Logger logger = LoggerFactory.getLogger(RandomValidateCodeUtil.class);private Random random = new Random();/*** 获得字体*/private Font getFont() {return new Font("Fixedsys", Font.CENTER_BASELINE, 18);}/*** 获得颜色*/private Color getRandColor(int fc, int bc) {if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc - 16);int g = fc + random.nextInt(bc - fc - 14);int b = fc + random.nextInt(bc - fc - 18);return new Color(r, g, b);}/*** 生成随机图片*/public void getRandcode(HttpServletRequest request, HttpServletResponse response) {HttpSession session = request.getSession();// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作g.fillRect(0, 0, width, height);//图片大小g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));//字体大小g.setColor(getRandColor(110, 133));//字体颜色// 绘制干扰线for (int i = 0; i <= lineSize; i++) {drowLine(g);}// 绘制随机字符String randomString = "";for (int i = 1; i <= stringNum; i++) {randomString = drowString(g, randomString, i);}logger.info(randomString);//将生成的随机字符串保存到session中session.removeAttribute(RANDOMCODEKEY);session.setAttribute(RANDOMCODEKEY, randomString);g.dispose();try {// 将内存中的图片通过流动形式输出到客户端ImageIO.write(image, "JPEG", response.getOutputStream());} catch (Exception e) {logger.error("将内存中的图片通过流动形式输出到客户端失败>>>>   ", e);}}/*** 绘制字符串*/private String drowString(Graphics g, String randomString, int i) {g.setFont(getFont());g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121)));String rand = String.valueOf(getRandomString(random.nextInt(randString.length())));randomString += rand;g.translate(random.nextInt(3), random.nextInt(3));g.drawString(rand, 13 * i, 16);return randomString;}/*** 绘制干扰线*/private void drowLine(Graphics g) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(13);int yl = random.nextInt(15);g.drawLine(x, y, x + xl, y + yl);}/*** 获取随机的字符*/public String getRandomString(int num) {return String.valueOf(randString.charAt(num));}}******************************************************************************Controller层:/*** 生成验证码*/@RequestMapping(value = "/getVerify")public void getVerify(HttpServletRequest request, HttpServletResponse response) {try {response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expire", 0);RandomValidateCodeUtil randomValidateCode = new RandomValidateCodeUtil();randomValidateCode.getRandcode(request, response);//输出验证码图片方法} catch (Exception e) {logger.error("获取验证码失败>>>>   ", e);}}********************************************************************************前端html代码:<div class="row"><div class="col-xs-6 pull_left"><div class="form-group"><input class="form-control" type="tel" id="verify_input" placeholder="请输入验证码" maxlength="4"></div></div><div class="col-xs-6 pull_left"><a href="javascript:void(0);" title="点击更换验证码"><img id="imgVerify" src="" alt="更换验证码" height="36" width="100%" onclick="getVerify(this);"></a></div></div>********************************************************//获取验证码function getVerify(obj){obj.src = httpurl + "/sys/getVerify?"+Math.random();}

java 验证码生成和验证相关推荐

  1. tp中php验证码程序,thinkPHP 验证码生成与验证

    您现在的位置是:网站首页>>PHP>>thinkPHP thinkPHP 验证码生成与验证 发布时间:2018-12-06 13:34:11作者:wangjian浏览量:842 ...

  2. java验证码生成及前端(Vue)显示

    验证码生成 环境: 后端:Java 前端:Vue 效果图(页面画的不好,勉强凑活看): 前端主要代码: <img @click="changeCode()" :src=&qu ...

  3. TP5验证码生成及验证

    TP5框架自带验证码模块,不过需要自行安装think-captcha扩展包,而think-captcha扩展包需要composer安装. 1.安装composer 因为composer安装包下载较慢, ...

  4. java验证码生成,含数字和英文字母

    验证码生成 //生成验证码(count为验证码的长度) public static String generateRandomVerificationCode(int count) {//10个数字 ...

  5. java token生成和验证_java生成定长度的随机验证码

    平凡也就两个字: 懒和惰;成功也就两个字: 苦和勤;优秀也就两个字: 你和我.跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!每一篇文章都是心 ...

  6. java token生成和验证_程序员应该如何设计更优雅的Token认证方式?

    基于Token的认证 通过上一篇你大体已经了解session和cookie认证了,session认证需要服务端做大量的工作来保证session信息的一致性以及session的存储,所以现代的web应用 ...

  7. 【2019.06.22】12306官网模拟登陆之验证码生成与验证初探

    前言 每一个学习过爬虫的人对12306肯定都是有点想法,但在每年春节或一些假期经历过12306官网抢票后,这些念头便逐渐不剩下多少了.有时候真的是活生生的人都瞅不出来 一直没有勇气去分析一下12306 ...

  8. java token生成和验证_Java Token登录验证 生成解析Token

    借鉴参考 Java Token登录验证 使用jjwt生成和解析JWT java基于token验证之登陆验证 等 什么是Token? 我的理解来说 token就是你访问服务器的口令,只要token合法, ...

  9. TOTP - 邮箱或手机号验证码生成与验证

    TOTP Time-based One-time Password algorithm, 是一种共享密钥和当前时间计算一次性密码的算法. 使用目的 利用时间戳和邮箱(或手机号)生成一段时间内唯一的验证 ...

最新文章

  1. 3.Hadoop的学习(ubuntu安装配置jdk)
  2. eclipse自动补全
  3. Lambda表达式——注重过程的编程思想
  4. 《零基础》MySQL 管理(三)
  5. OpenShift 4 Hands-on Lab (5) - 用Build、Builder Trigger、Webhook构建和更新镜像
  6. 某车企笔试题解答(2)
  7. 人类最美的24张数学画(图)
  8. 自动统计文件夹下所有音频时长与个数
  9. codeforce 417D Cunning Gena (状压DP)
  10. matplotlib入门基础(五)轴坐标范围 轴刻度比例 轴刻度
  11. [转]关于使用多表做update的语法
  12. 2022电大国家开放大学网上形考任务-人力资源管理非免费(非答案)
  13. 【Linux认证考试分数线多少】
  14. python大漠插件多开_绝地助手_python挪用大漠插件教程04鼠键事宜及基本项目头脑...
  15. c语言zip 库,c语言调用libzip库遍历zip文件
  16. 手把手教你建立微信公众平台
  17. 使用WindowsAPPDriver做PC客户端自动化测试
  18. HIVE学习系列——windows Hadoop安装(下)
  19. C++ MFC棋牌类小游戏day1
  20. HI3518E按键驱动和应用代码

热门文章

  1. 团队作业4——第一次项目冲刺(Alpha版本)4.25
  2. LA_4670_Dominating_Patterns_(AC自动机+map)
  3. Linux第六次学习笔记
  4. 在Java中调用与系统有关的剪切板Clipboard
  5. 二叉树相关面试题(二)
  6. Div Vertical Menu ver2
  7. 数据可视化黑科技!它比python强大20倍
  8. 如何构建可视化的营销数据大屏? 1
  9. 深入了解帆软报表系统的启动过程一
  10. 拦截器获取请求参数post_spring boot拦截器中获取request post请求中的参数