Html5生成验证码的示例代码


Posted in Javascript onMay 10, 2021

利用Html5的canvas标签生成画布,在画布上利用随机生成的数字画上验证码,背景为随机生成的颜色和杂乱的直线与点点。

进阶:利用表单插件属性绑定验证码数据(json)可以在发送时候或者异步通信进行后台数据获取与检查。

代码块

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>验证码</title>
<style type="text/css">
    #canvas{
        cursor:pointer;
    }
</style>
</head>
<body>
    <canvas id="canvas" width="150px" height="50px"></canvas>
<script>
        //生成随机数
    function randomNum(min,max){
        return Math.floor(Math.random()*(max-min)+min);
    }
        //生成随机颜色RGB分量
    function randomColor(min,max){
        var _r = randomNum(min,max);
        var _g = randomNum(min,max);
        var _b = randomNum(min,max);
        return "rgb("+_r+","+_g+","+_b+")";
    }
    //先阻止画布默认点击发生的行为再执行drawPic()方法
    document.getElementById("canvas").onclick = function(e){
        e.preventDefault();
        drawPic();
    };
    function drawPic(){
        //获取到元素canvas
        var $canvas = document.getElementById("canvas");
        var _str = "0123456789";//设置随机数库
        var _picTxt = "";//随机数
        var _num = 4;//4个随机数字
        var _width = $canvas.width;
        var _height = $canvas.height;
        var ctx = $canvas.getContext("2d");//获取 context 对象
        ctx.textBaseline = "bottom";//文字上下对齐方式--底部对齐
        ctx.fillStyle = randomColor(180,240);//填充画布颜色
        ctx.fillRect(0,0,_width,_height);//填充矩形--画画
        for(var i=0; i<_num; i++){
            var x = (_width-10)/_num*i+10;
            var y = randomNum(_height/2,_height);
            var deg = randomNum(-45,45);
            var txt = _str[randomNum(0,_str.length)];
            _picTxt += txt;//获取一个随机数
            ctx.fillStyle = randomColor(10,100);//填充随机颜色
            ctx.font = randomNum(16,40)+"px SimHei";//设置随机数大小,字体为SimHei
            ctx.translate(x,y);//将当前xy坐标作为原始坐标
            ctx.rotate(deg*Math.PI/180);//旋转随机角度
            ctx.fillText(txt, 0,0);//绘制填色的文本
            ctx.rotate(-deg*Math.PI/180);
            ctx.translate(-x,-y);
        }
        for(var i=0; i<_num; i++){
            //定义笔触颜色
            ctx.strokeStyle = randomColor(90,180);
            ctx.beginPath();
            //随机划线--4条路径
            ctx.moveTo(randomNum(0,_width), randomNum(0,_height));
            ctx.lineTo(randomNum(0,_width), randomNum(0,_height));
            ctx.stroke();
        }
        for(var i=0; i<_num*10; i++){
            ctx.fillStyle = randomColor(0,255);
            ctx.beginPath();
            //随机画原,填充颜色
            ctx.arc(randomNum(0,_width),randomNum(0,_height), 1, 0, 2*Math.PI);
            ctx.fill();
        }
        return _picTxt;//返回随机数字符串
    }
    drawPic();
</script>
</body>
</html>

到此这篇关于Html5生成验证码的示例代码的文章就介绍到这了,更多相关Html5生成验证码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
Javascript 相关文章推荐
js+html5实现canvas绘制镂空字体文本的方法
Jun 05 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
基于jQuery实现的菜单切换效果
Oct 16 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
jquery ajax双击div可直接修改div中的内容
Mar 04 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
详解Node.js串行化流程控制
May 04 Javascript
vue.js实例todoList项目
Jul 07 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
一文了解JavaScript用Element Traversal新属性遍历子元素
Nov 27 Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
微信小程序实现拍照和相册选取图片
微信小程序实现录音Record功能
如何用JavaScipt测网速
May 09 #Javascript
浅谈JS的二进制家族
You might like
PHP中数组的三种排序方法分享
2012/05/07 PHP
PHP计数器的实现代码
2013/06/08 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
php实现递归的三种基本方式
2020/07/04 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
javascript 全角转换实现代码
2009/07/17 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
浅谈Python 递归算法指归
2019/08/22 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
如何高效率的查找一个月以内的数据
2012/04/15 面试题
培训主管岗位职责
2014/02/01 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
大学生求职计划书
2014/04/30 职场文书
敬老月活动总结
2014/08/28 职场文书
素质拓展训练感想
2015/08/07 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android