canvas绘制验证码简单明了

canvas绘制验证码

具体思路
随机生成四个文字,由字母和数字组成
生成干扰点和干扰线

<!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>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 = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
        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>

总结

good morning
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值