使用canvas及js简单生成验证码方法

发布时间 - 2026-01-11 00:29:42    点击率:

在很多时候都需要用到验证码,前端验证码需要知道Html5中的canvas知识点。验证码生成步骤是

1.生成一张画布canvas

2.生成随机数验证码 

3.在画布中生成干扰线 

4.把验证码文本填充到画布中 

5.点击画布更换验证码

结构与样式:

<canvas id="mycanvas" width='90' height='40'>
 您的浏览器不支持canvas,请换个浏览器试试~
</canvas>

<style>
#mycanvas{
 cursor: pointer;
}
</style>

下面来编写js代码:

/*生成4位随机数*/
 function rand(){
  var str="abcdefghijklmnopqrstuvwxyz0123456789";
  var arr=str.split("");
  var validate="";
  var ranNum;
  for(var i=0;i<4;i++){
   ranNum=Math.floor(Math.random()*36); //随机数在[0,35]之间
   validate+=arr[ranNum];
  }
  return validate;
 }
 /*干扰线的随机x坐标值*/
 function lineX(){
  var ranLineX=Math.floor(Math.random()*90);
  return ranLineX;
 }
 /*干扰线的随机y坐标值*/
 function lineY(){
  var ranLineY=Math.floor(Math.random()*40);
  return ranLineY;
 }
 function clickChange(){
  var mycanvas=document.getElementById('mycanvas');
  var cxt=mycanvas.getContext('2d');
  cxt.fillStyle='#000';
  cxt.fillRect(0,0,90,40);
  /*生成干扰线20条*/
  for(var j=0;j<20;j++){
   cxt.strokeStyle='#fff';
   cxt.beginPath(); //若省略beginPath,则每点击一次验证码会累积干扰线的条数
   cxt.moveTo(lineX(),lineY());
   cxt.lineTo(lineX(),lineY());
   cxt.lineWidth=0.5;
   cxt.closePath();
   cxt.stroke();
  }
  cxt.fillStyle='red';
  cxt.font='bold 20px Arial';
  cxt.fillText(rand(),25,25); //把rand()生成的随机数文本填充到canvas中  
 }
 clickChange();
 /*点击验证码更换*/
 mycanvas.onclick=function(e){
  e.preventDefault(); //阻止鼠标点击发生默认的行为
  clickChange();
 };

这样就写好一个较普通的验证码了,当然也有很多需要优化的地方,比如干扰线的随机颜色、可以加干扰点以及文本的随机位置随机颜色等等。赶紧去试试吧~


# canvas  # 生成验证码  # js  # 绘制验证码  # js生成验证码  # 原生js+canvas实现验证码  # js+h5 canvas实现图片验证码  # js+canvas绘制图形验证码  # JavaScript使用canvas绘制随机验证码  # JS+HTML5 canvas绘制验证码示例  # JavaScript Canvas实现验证码  # js+canvas实现验证码功能  # js+canvas实现滑动拼图验证码功能  # js实现点击获取验证码倒计时效果  # js canvas实现验证码并获取验证码功能  # 验证码  # 随机数  # 您的  # 也有  # 坐标值  # 不支持  # 换个  # 好一个  # 条数  # 就写  # 鼠标点击  # 试试吧  # cursor  # pointer  # gt  # style  # arr  # validate  # split  # str 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 大同网页,大同瑞慈医院官网?  详解MySQL数据库的安装与密码配置  Python面向对象测试方法_mock解析【教程】  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel如何创建自定义Artisan命令?(代码示例)  教你用AI将一段旋律扩展成一首完整的曲子  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在万网自助建站平台快速创建网站?  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  如何在阿里云服务器自主搭建网站?  详解jQuery中的事件  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  zabbix利用python脚本发送报警邮件的方法  Android自定义listview布局实现上拉加载下拉刷新功能  轻松掌握MySQL函数中的last_insert_id()  如何快速查询网站的真实建站时间?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  微信小程序 require机制详解及实例代码  如何用西部建站助手快速创建专业网站?  如何在局域网内绑定自建网站域名?  如何用PHP快速搭建CMS系统?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  如何注册花生壳免费域名并搭建个人网站?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  JavaScript模板引擎Template.js使用详解  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Linux系统运维自动化项目教程_Ansible批量管理实战  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel如何处理CORS跨域请求?(配置示例)  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  中山网站推广排名,中山信息港登录入口?  企业网站制作这些问题要关注  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  海南网站制作公司有哪些,海口网是哪家的?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何在香港服务器上快速搭建免备案网站?  详解vue.js组件化开发实践  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何在万网开始建站?分步指南解析