直播平台开发,自带干扰线的js随机验证码

直播平台开发,自带干扰线的js随机验证码

 

1
<!DOCTYPE html><br><html><br><head><br>    <meta charset="UTF-8"><br>    <meta name="viewport" content="width=device-width, initial-scale=1.0"><br>    <meta http-equiv="X-UA-Compatible" content="ie=edge"><br>    <title>随机验证码(带干扰线)</title><br></head><br><style><br>    .codeVesselBox {<br>        width: 120px;<br>        height: 30px;<br>        margin-bottom: 4px;<br>    }<br></style><br><body><br>    <div><br>        <div id="vCodeImg"></div><br>        <div><br>            <input id="id" type="text"><br>            <button onclick="threeFn()">提交</button><br>        </div><br>    </div><br></body><br><script><br>    (function (window, document) {<br>        function GVerify(options) { //创建一个图形验证码对象,接收options对象为参数<br>            this.options = { //默认options参数值<br>                id: "", //容器Id<br>                canvasId: "verifyCanvas", //canvas的ID<br>                width: "100", //默认canvas宽度<br>                height: "30", //默认canvas高度<br>                type: "blend", //图形验证码默认类型blend:数字字母混合类型、number:纯数字、letter:纯字母<br>                code: ""<br>            }<br>            if (Object.prototype.toString.call(options) == "[object Object]") { //判断传入参数类型<br>                for (var i in options) { //根据传入的参数,修改默认参数值<br>                    this.options[i] = options[i];<br>                }<br>            } else {<br>                this.options.id = options;<br>            }<br>            this.options.numArr = "0,1,2,3,4,5,6,7,8,9".split(",");<br>            this.options.letterArr = getAllLetter();<br>            this._init();<br>            this.refresh();<br>        }<br>        GVerify.prototype = {<br>            //版本号<br>            version: '1.0.0',<br>            //初始化方法<br>            _init: function () {<br>                var con = document.getElementById(this.options.id);<br>                var canvas = document.createElement("canvas");<br>                this.options.width = con.offsetWidth > 0 ? con.offsetWidth : "100";<br>                this.options.height = con.offsetHeight > 0 ? con.offsetHeight : "30";<br>                canvas.id = this.options.canvasId;<br>                canvas.width = this.options.width;<br>                canvas.height = this.options.height;<br>                canvas.style.cursor = "pointer";<br>                canvas.innerHTML = "您的浏览器版本不支持canvas";<br>                con.appendChild(canvas);<br>                var parent = this;<br>                canvas.onclick = function () {<br>                    parent.refresh();<br>                }<br>            },<br>            //生成验证码<br>            refresh: function () {<br>                this.options.code = "";<br>                var canvas = document.getElementById(this.options.canvasId);<br>                if (canvas.getContext) {<br>                    var ctx = canvas.getContext('2d');<br>                } else {<br>                    return;<br>                }<br>                ctx.textBaseline = "middle";<br>                ctx.fillStyle = randomColor(100, 240);<br>                ctx.fillRect(0, 0, this.options.width, this.options.height);<br>                if (this.options.type == "blend") { //判断验证码类型<br>                    var txtArr = this.options.numArr.concat(this.options.letterArr);<br>                } else if (this.options.type == "number") {<br>                    var txtArr = this.options.numArr;<br>                } else {<br>                    var txtArr = this.options.letterArr;<br>                }<br>                for (var i = 1; i <= 4; i++) {<br>                    var txt = txtArr[randomNum(0, txtArr.length)];<br>                    this.options.code += txt;<br>                    ctx.font = randomNum(this.options.height / 1.2, this.options.height) + 'px SimHei'; //随机生成字体大小<br>                    ctx.fillStyle = randomColor(1, 160); //随机生成字体颜色<br>                    // ctx.shadowOffsetX = randomNum(-3, 3);<br>                    // ctx.shadowOffsetY = randomNum(-3, 3);<br>                    // ctx.shadowBlur = randomNum(-3, 3);<br>                    ctx.shadowColor = "rgba(0, 0, 0, 0.3)";<br>                    var x = this.options.width / 5 * i;<br>                    var y = this.options.height / 2;<br>                    var deg = randomNum(-30, 30);<br>                    //设置旋转角度和坐标原点<br>                    ctx.translate(x, y);<br>                    ctx.rotate(deg * Math.PI / 180);<br>                    ctx.fillText(txt, 0, 0);<br>                    //恢复旋转角度和坐标原点<br>                    ctx.rotate(-deg * Math.PI / 180);<br>                    ctx.translate(-x, -y);<br>                }<br>                //绘制干扰线<br>                for (var i = 0; i < 4; i++) {<br>                    ctx.strokeStyle = randomColor(40, 180);<br>                    ctx.beginPath();<br>                    ctx.moveTo(randomNum(0, this.options.width), randomNum(0, this.options.height));<br>                    ctx.lineTo(randomNum(0, this.options.width), randomNum(0, this.options.height));<br>                    ctx.stroke();<br>                }<br>                //绘制干扰点<br>                for (var i = 0; i < this.options.width / 6; i++) {//this.options.width / 6,除以的值越大,点越少<br>                    ctx.fillStyle = randomColor(0, 255);<br>                    ctx.beginPath();<br>                    ctx.arc(randomNum(0, this.options.width), randomNum(0, this.options.height), 1, 0, 2 * Math.PI);<br>                    ctx.fill();<br>                }<br>            },<br>            //验证验证码<br>            validate: function (code) {<br>                var code = code.toLowerCase();<br>                // toLowerCase() 方法用于把字符串转换为小写。<br>                var v_code = this.options.code.toLowerCase();<br>                console.log(code);<br>                if (code == v_code) {<br>                    return true;<br>                } else {<br>                    this.refresh();<br>                    return false;<br>                }<br>            }<br>        }<br>        //生成字母数组<br>        function getAllLetter() {<br>            var letterStr = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";<br>            return letterStr.split(",");<br>        }<br>        //生成一个随机数<br>        function randomNum(min, max) {<br>            return Math.floor(Math.random() * (max - min) + min);<br>        }<br>        //生成一个随机色<br>        function randomColor(min, max) {<br>            var r = randomNum(min, max);<br>            var g = randomNum(min, max);<br>            var b = randomNum(min, max);<br>            return "rgb(" + r + "," + g + "," + b + ")";<br>        }<br>        window.GVerify = GVerify;<br>    })(window, document);<br>    // 调用GVerifty<br>    var verifyCode = new GVerify("vCodeImg");<br>    console.log(verifyCode.options.code);<br>    function threeFn() {<br>        var a = document.getElementById('id').value;<br>        if (a != verifyCode.options.code) {<br>            alert("验证码错误")<br>            console.log(a, "验证码的值...");<br>        } else {<br>            alert("验证码正确")<br>            console.log(a, "验证码的值...");<br>        }<br>    }<br></script><br></html>

以上就是直播平台开发,自带干扰线的js随机验证码, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-09-22 直播app系统源码,实现隐藏标题栏
2021-09-22 直播视频app源码,实现直播内容自定义分页的效果
2021-09-22 直播带货app开发利用ScrollView实现下拉内容刷新的效果
点击右上角即可分享
微信分享提示