JS+HTML5 canvas绘制验证码示例


Posted in Javascript onDecember 05, 2018

本文实例讲述了JS+HTML5 canvas绘制验证码。分享给大家供大家参考,具体如下:

css样式:

<style>
body{
  text-align: center;
}
canvas{
  background:#ddd;
}
</style>

HTML部分:

body中添加标签canvas:

<canvas id="c3"></canvas>

js部分:

//创建两个变量保存验证码的宽度和高度
  var w = 120;
  var h = 30;
//将变量值赋值给canvas
  c3.width = w;
  c3.height = h;
//获取画笔
  var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
  function rn(min,max){
    var n = Math.random()*(max-min)+min;
    return Math.floor(n);
  }
//随机颜色
  function rc(min,max){
    var r = rn(min,max);
    var g = rn(min,max);
    var b = rn(min,max);
    return `rgb(${r},${g},${b})`;
}
//填充的背景
  ctx.fillStyle=rc(180,230);
  ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
  var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
  var str ="";
  for(var i = 0;i<4;i++){
    var index = Math.floor(Math.random()*pool.length);
    str +=pool[index];
}
//console.log(str);
  ctx.font = "30px SimHei";
  ctx.fillStyle = rc(80,180);//文字颜色
  ctx.textBaseline="top";
  ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
  for(var i = 0;i<6;i++){
    ctx.strokeStyle = rc(0,255);
    ctx.beginPath();
    ctx.moveTo(rn(0,w),rn(0,h));
    ctx.lineTo(rn(0,w),rn(0,h));
    ctx.stroke();
  }
//绘制50个干扰点
  for(var i = 0;i<50;i++){
    ctx.fillStyle = rc(0,255);
    ctx.beginPath();
    ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
    ctx.fill();
  }

感兴趣的朋友可以使用在线HTML/CSS/JavaScript前端代码调试运行工具:http://tools.3water.com/code/WebCodeRun,测试上述代码运行效果。

或者使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun,测试如下完整示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>3water.com canvas绘制验证码</title>
<style>
body{
  text-align: center;
}
canvas{
  background:#ddd;
}
</style>
</head>
<body>
<canvas id="c3"></canvas>
<script>
//创建两个变量保存验证码的宽度和高度
  var w = 120;
  var h = 30;
//将变量值赋值给canvas
  c3.width = w;
  c3.height = h;
//获取画笔
  var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
  function rn(min,max){
    var n = Math.random()*(max-min)+min;
    return Math.floor(n);
  }
//随机颜色
  function rc(min,max){
    var r = rn(min,max);
    var g = rn(min,max);
    var b = rn(min,max);
    return `rgb(${r},${g},${b})`;
}
//填充的背景
  ctx.fillStyle=rc(180,230);
  ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
  var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
  var str ="";
  for(var i = 0;i<4;i++){
    var index = Math.floor(Math.random()*pool.length);
    str +=pool[index];
}
//console.log(str);
  ctx.font = "30px SimHei";
  ctx.fillStyle = rc(80,180);//文字颜色
  ctx.textBaseline="top";
  ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
  for(var i = 0;i<6;i++){
    ctx.strokeStyle = rc(0,255);
    ctx.beginPath();
    ctx.moveTo(rn(0,w),rn(0,h));
    ctx.lineTo(rn(0,w),rn(0,h));
    ctx.stroke();
  }
//绘制50个干扰点
  for(var i = 0;i<50;i++){
    ctx.fillStyle = rc(0,255);
    ctx.beginPath();
    ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
    ctx.fill();
  }
</script>
</body>
</html>

运行结果如下:

JS+HTML5 canvas绘制验证码示例

更多关于JavaScript相关内容还可查看本站专题:《JavaScript+HTML5特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Prototype Number对象 学习
Jul 19 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
Feb 11 Javascript
js控制href内容的连接内容的变化示例
Apr 30 Javascript
Jquery组件easyUi实现表单验证示例
Aug 23 Javascript
Vue渲染函数详解
Sep 15 Javascript
使用JS中的Replace()方法遇到的问题小结
Oct 20 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
微信小程序中为什么使用var that=this
Aug 27 Javascript
微信小程序登陆注册功能的实现代码
Dec 10 Javascript
js 闭包深入理解与实例分析
Mar 19 Javascript
使用js和canvas实现时钟效果
Sep 08 Javascript
OpenLayers3实现地图显示功能
Sep 25 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
Dec 05 #Javascript
JS实现简单的点赞与踩功能示例
Dec 05 #Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 #Javascript
vue组件之间通信实例总结(点赞功能)
Dec 05 #Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 #Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 #Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 #Javascript
You might like
学习使用PHP数组
2006/10/09 PHP
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
jQuery操作select的实例代码
2012/06/14 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
jquery实现拖动效果
2016/08/10 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
python人人网登录应用实例
2014/09/26 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Python Requests 基础入门
2016/04/07 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python实现石头剪刀布小游戏
2021/01/20 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
简单介绍Object类的功能、常用方法
2013/10/02 面试题
办公室主任先进事迹
2014/01/18 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
2014年计生工作总结
2014/11/21 职场文书
英文感谢信格式
2015/01/21 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers