基于JS实现一个随机生成验证码功能


Posted in Javascript onMay 29, 2019

效果展示

基于JS实现一个随机生成验证码功能

实现原理

1. html:一般就是一个div: <div id="code"></div> ,样式根据需求设计。

2. JS:1)将所有的验证码所用的字符放在一个字符串中

 

  2)在这个字符串的字符个数以内,随机生成索引号

  3)根据索引号查找对应字符,拼接成验证码的字符串

代码实现

HTML:

<div id="code"></div>

CSS:

* {
  margin: 0;
  padding: 0;
}
div {
  width: 80px;
  height: 30px;
  font-size: 18px;
  line-height: 30px;
  text-align: center;
  color: #333;
  border: 1px solid red;
  margin: 100px auto;
  cursor: pointer;
}

JavaScript:

var codeStr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var oDiv = document.getElementById('code');
// 用来生成随机整数
function getRandom(n, m) { // param: (Number, Number)
  n = Number(n);
  m = Number(m);
  // 确保 m 始终大于 n
  if (n > m) {
    var temp = n;
    n = m;
    m = temp;
  }
  // 下有详细说明
  return Math.floor(Math.random()*(m - n) + n);
}
// 将随机生成的整数下标对应的字母放入div中
function getCode() {
  var str = '';
  // 验证码有几位就循环几次
  for (var i = 0;i < 4;i ++) {
    var ran = getRandom(0, 62);
    str += codeStr.charAt(ran);
  }
  oDiv.innerHTML = str;
}
getCode();// 调用函数,页面刷新也会刷新验证码
// 点击刷新验证码
oDiv.onclick = function(){
  getCode();
}

代码分析

JS:

1)将所有的验证码所用的字符放在一个字符串中

             -- > 代码第1行,除了字母数字也可放入中文汉字等。

 

        2)在这个字符串的字符个数以内,随机生成索引号

             -- > 第4行的函数用于生成随机整数,参数 (n, m)为数字,Number()确保是数字

        默认m > n,防止传参有误,用if判断后改正

        Math.random() -- > [0,1)

        Math.random() * (m - n) -- > [0, m - n)

        Math.random() * (m - n) + n -- > [n, m)

        为了能将codeStr所有的下标都取到,上述m若是codeStr.length,想要取值能取到最后一位,再使用Math.floor()向下取整。

        n 为 0,m 为 codeStr.length 则随机范围为codeStr的所有元素下标。例(n, m) -- > (0, 62)计算后的取值范围:下标为[0, 61]的整数。

        3)根据下标查找对应元素,拼接成验证码的字符串

        第17行的函数getCode()获取字符串中对应元素,并拼接成字符串返回到页面中。最后点击div可不断生成随机验证码。

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>随机生成验证码</title>
  <style>
  * {
    margin: 0;
    padding: 0;
  }
  div {
    width: 80px;
    height: 30px;
    font-size: 18px;
    line-height: 30px;
    text-align: center;
    color: #333;
    border: 1px solid red;
    margin: 100px auto;
    cursor: pointer;
  }
  </style>
</head>

<body>
  <div id="code"></div>

  <script>
  var codeStr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  var oDiv = document.getElementById('code');
  // 用来生成随机整数
  function getRandom(n, m) { // param: (Number, Number)
    n = Number(n);
    m = Number(m);
    // 确保 m 始终大于 n
    if (n > m) {
      var temp = n;
      n = m;
      m = temp;
    }
    return Math.floor(Math.random()*(m - n) + n);
  }
  // 将随机生成的整数下标对应的字母放入div中
  function getCode() {
    var str = '';
    // 验证码有几位就循环几次
    for (var i = 0;i < 4;i ++) {
      var ran = getRandom(0, 62);
      str += codeStr.charAt(ran);
    }
    oDiv.innerHTML = str;
  }
  getCode();// 调用函数,页面刷新也会刷新验证码
  // 点击刷新验证码
  oDiv.onclick = function(){
    getCode();
  }
  </script>
</body>
</html>

总结

以上所述是小编给大家介绍的基于JS实现一个随机生成验证码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
May 03 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
Dec 16 Javascript
javascript背景时钟实现方法
Jun 18 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 Javascript
详解Vue This$Store总结
Dec 17 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
Jan 16 Javascript
详解JavaScript作用域和作用域链
Mar 19 Javascript
jquery实现点击弹出对话框
Feb 08 jQuery
原生js实现点击轮播切换图片
Feb 11 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
微信小程序mpvue点击按钮获取button值的方法
May 29 #Javascript
深入了解响应式React Native Echarts组件
May 29 #Javascript
node将geojson转shp返回给前端的实现方法
May 29 #Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 #Javascript
关于element-ui的隐藏组件el-scrollbar的使用
May 29 #Javascript
JS学习笔记之数组去重实现方法小结
May 29 #Javascript
基于Vue实现电商SKU组合算法问题
May 29 #Javascript
You might like
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
php下获取http状态的实现代码
2014/05/09 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
js 处理URL实用技巧
2010/11/23 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
js中的闭包实例展示
2018/11/01 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python进度条的制作代码实例
2019/08/31 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
用python计算文件的MD5值
2020/12/23 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
电焊工岗位工作职责
2014/07/09 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2014年团总支工作总结
2014/11/21 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫