国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語(yǔ)言 - JavaScript - js教程 - js實(shí)現(xiàn)驗(yàn)證碼干擾(動(dòng)態(tài))

js實(shí)現(xiàn)驗(yàn)證碼干擾(動(dòng)態(tài))

2022-01-22 18:59lzh~ js教程

這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)驗(yàn)證碼干擾,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js實(shí)現(xiàn)驗(yàn)證碼動(dòng)態(tài)干擾的具體代碼,供大家參考,具體內(nèi)容如下

效果一

js實(shí)現(xiàn)驗(yàn)證碼干擾(動(dòng)態(tài))

效果二

js實(shí)現(xiàn)驗(yàn)證碼干擾(動(dòng)態(tài))

代碼一

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>js簡(jiǎn)單驗(yàn)證碼使用</title>
<style>
 .code
 {
 font-family:Arial;
 font-style:italic;
 color:blue;
 font-size:30px;
 border:0;
 padding:2px 3px;
 letter-spacing:3px;
 font-weight:bolder;
 float:left;
 cursor:pointer;
 width:150px;
 height:50px;
 line-height:60px;
 text-align:center;
 vertical-align:middle;
 background-color:#D8B7E3;
 }
 span {
 text-decoration:none;
 font-size:12px;
 color:#288bc4;
 padding-left:10px;
 }
 
 span:hover {
 text-decoration:underline;
 cursor:pointer;
 }
</style>
 
<script>
 //頁(yè)面加載時(shí),生成隨機(jī)驗(yàn)證碼
 window.onload=function(){
 createCode(4);
 }
 
 //生成驗(yàn)證碼的方法
 function createCode(length) {
 var code = "";
 var codeLength = parseInt(length); //驗(yàn)證碼的長(zhǎng)度
 var checkCode = document.getElementById("checkCode");
 所有候選組成驗(yàn)證碼的字符,當(dāng)然也可以用中文的
 var codeChars = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
 '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');
 //循環(huán)組成驗(yàn)證碼的字符串
 for (var i = 0; i < codeLength; i++)
 {
 //獲取隨機(jī)驗(yàn)證碼下標(biāo)
 var charNum = Math.floor(Math.random() * 62);
 //組合成指定字符驗(yàn)證碼
 code += codeChars[charNum];
 }
 if (checkCode)
 {
 //為驗(yàn)證碼區(qū)域添加樣式名
 checkCode.className = "code";
 //將生成驗(yàn)證碼賦值到顯示區(qū)
 checkCode.innerHTML = code;
 }
 }
 
 //檢查驗(yàn)證碼是否正確
 function validateCode()
 {
 //獲取顯示區(qū)生成的驗(yàn)證碼
 var checkCode = document.getElementById("checkCode").innerHTML;
 //獲取輸入的驗(yàn)證碼
 var inputCode = document.getElementById("inputCode").value;
 console.log(checkCode);
 console.log(inputCode);
 if (inputCode.length <= 0)
 {
 alert("請(qǐng)輸入驗(yàn)證碼!");
 }
 else if (inputCode.toUpperCase() != checkCode.toUpperCase())
 {
 alert("驗(yàn)證碼輸入有誤!");
 createCode(4);
 }
 else
 {
 alert("驗(yàn)證碼正確!");
 }
 }
</script>
</head>
<body>
 <table border="0" cellspacing="5" cellpadding="5" >
 <tr>
 <td> <div id="checkCode" class="code" onclick="createCode(4)" ></div></td>
 <td> <span onclick="createCode(4)">看不清換一張</span></td>
 </tr>
 <tr>
 <td>驗(yàn)證碼:</td>
 <td><input type="text" id="inputCode" style="float:left;" /></td>
 </tr>
 <tr>
 <td></td>
 <td><input type="button" onclick="validateCode()" value="確定" /></td>
 </tr>
 </table>
 </div>
</body>
</html>

代碼二

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE html>
 
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>canvas驗(yàn)證碼</title>
</head>
<body>
 <canvas width="200" height="60" id="check" style="border:1px solid #000;">您的瀏覽器不支持canvas標(biāo)簽!</canvas>
 <script>
 var ctx = document.getElementById("check").getContext("2d");
 var ctxW = document.getElementById("check").clientWidth;
 var ctxH = document.getElementById("check").clientHeight;
 /**
 * 產(chǎn)生一個(gè)隨機(jī)數(shù) 可設(shè)置隨機(jī)數(shù)區(qū)間
 * @param {[Number]} min [隨機(jī)數(shù)區(qū)間下限]
 * @param {[Number]} max [隨機(jī)數(shù)區(qū)間上限]
 * @return {[Number]} [返回一個(gè)在此區(qū)間的隨機(jī)數(shù)]
 */
 
 function ranNum(min, max) {
 return Math.random() * (max - min) + min;
 }
 /**
 * 返回一個(gè)隨機(jī)顏色 可設(shè)置顏色區(qū)間
 * @param {[Number]} min [顏色下限]
 * @param {[Number]} max [顏色上限]
 * @return {[String]} [隨機(jī)顏色]
 */
 
 function ranColor(min, max) {
 var r = ranNum(min, max);
 var g = ranNum(min, max);
 var b = ranNum(min, max);
 // return "rgb(" + r + "," + g + "," + b + ")";
 return `rgb(${r},${g},${b})`;
 }
 /**
 * 隨機(jī)字符串?dāng)?shù)組
 * @return {[Array]} [隨機(jī)數(shù)組]
 */
 function ranStr() {
 var str = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
 return str.split("").sort(function () {
 return Math.random() - 0.5
 });
 }
 
 /**
 * 繪制文本字符串
 * @param {[String]} canvasId [canvas的id]
 * @param {[Number]} canvasW [canvas的width]
 * @param {[Number]} canvasH [canvas的height]
 * @param {[Number]} num [繪制驗(yàn)證碼的字?jǐn)?shù)]
 * @param {[Number]} fsMin [字體大小下限]
 * @param {[Number]} fsMax [字體大小上限]
 * @param {[Number]} frMin [字體旋轉(zhuǎn)偏移下限]
 * @param {[Number]} frMax [字體旋轉(zhuǎn)偏移上限]
 * @param {[Number]} min [顏色下限]
 * @param {[Number]} max [顏色上限]
 * @return {[String]} [隨機(jī)字符串]
 */
 
 function drawText(canvasId, canvasW, canvasH, num, fsMin, fsMax, frMin, frMax, min, max) {
 var str = "";
 for (var i = 0; i < num; i++) {
 var char = ranStr()[Math.floor(0, ranStr().length)];
 var fs = ranNum(fsMin, fsMax);
 canvasId.font = fs + "px Verdana";
 canvasId.fillStyle = ranColor(min, max);
 // 保存繪制的狀態(tài)
 canvasId.save();
 // context.translate(x,y);
 // x 添加到水平坐標(biāo)(x)上的值
 // y 添加到垂直坐標(biāo)(y)上的值
 // 偏移
 
 canvasId.translate(canvasW / num * i + canvasW / 20, 0);
 // 變換角度
 canvasId.rotate(ranNum(frMin, frMax) * Math.PI / 180);
 // context.fillText(text,x,y,maxWidth);
 // text 規(guī)定在畫布上輸出的文本。
 // x 開始繪制文本的 x 坐標(biāo)位置(相對(duì)于畫布)。
 // y 開始繪制文本的 y 坐標(biāo)位置(相對(duì)于畫布)。
 // maxWidth 可選。允許的最大文本寬度,以像素計(jì)。
 canvasId.fillText(char, 0, (canvasH + fs) / 2.5, canvasW / num);
 // 返回之前保存過的路徑狀態(tài)和屬性
 ctx.restore();
 str += char;
 }
 
 // console.log(str);
 return str;
 }
 
 /**
 * 繪制背景
 * @param {[String]} canvasId [canvas的id]
 * @param {[Number]} canvasW [canvas的width]
 * @param {[Number]} canvasH [canvas的height]
 * @param {[Number]} min [下限]
 * @param {[Number]} max [上限]
 */
 
 function drawBg(canvasId, canvasW, canvasH, min, max) {
 // 繪制canvas背景
 canvasId.fillStyle = ranColor(min, max);
 // 填充顏色
 canvasId.fillRect(0, 0, canvasW, canvasH);
 }
 
 /**
 * 繪制干擾 圓點(diǎn)
 * @param {[String]} canvasId [canvas的id]
 * @param {[Number]} canvasW [canvas的width]
 * @param {[Number]} canvasH [canvas的height]
 * @param {[Number]} num [繪制的數(shù)量]
 * @param {[Number]} r [圓點(diǎn)半徑]
 * @param {[Number]} min [下限]
 * @param {[Number]} max [上線]
 */
 
 function drawCircle(canvasId, canvasW, canvasH, num, r, min, max) {
 for (var i = 0; i < num; i++) {
 // 開始繪制 (拿起筆)
 canvasId.beginPath();
 // context.arc(x,y,r,sAngle,eAngle,counterclockwise); (繪制)
 // x 圓的中心的 x 坐標(biāo)。
 // y 圓的中心的 y 坐標(biāo)。
 // r 圓的半徑。
 // sAngle 起始角,以弧度計(jì)。(弧的圓形的三點(diǎn)鐘位置是 0 度)。
 // eAngle 結(jié)束角,以弧度計(jì)。
 // counterclockwise 可選。規(guī)定應(yīng)該逆時(shí)針還是順時(shí)針繪圖。False = 順時(shí)針,true = 逆時(shí)針。
 canvasId.arc(ranNum(0, canvasW), ranNum(0, canvasH), r, 0, 2 * Math.PI);
 
 
 // 填充顏色
 canvasId.fillStyle = ranColor(min, max);
 
 // 填充
 canvasId.fill();
 
 // 閉合繪制 (放開筆)
 canvasId.closePath();
 }
 }
 
 /**
 * 繪制干擾 線段
 * @param {[String]} canvasId [canvas的id]
 * @param {[Number]} canvasW [canvas的width]
 * @param {[Number]} canvasH [canvas的height]
 * @param {[Number]} num [繪制的數(shù)量]
 * @param {[Number]} min [下限]
 * @param {[Number]} max [上線]
 */
 
 function drawLine(canvasId, canvasW, canvasH, num, min, max) {
 for (var i = 0; i < num; i++) {
 // 開始繪制 (拿起筆)
 canvasId.beginPath();
 // 繪制開始點(diǎn)
 canvasId.moveTo(ranNum(0, canvasW), ranNum(0, canvasH));
 // 繪制結(jié)束點(diǎn)
 canvasId.lineTo(ranNum(0, canvasW), ranNum(0, canvasH));
 canvasId.strokeStyle = ranColor(min, max);
 canvasId.stroke();
 canvasId.closePath();
 }
 }
 // 繪制驗(yàn)證碼
 function drawCanvas() {
 // 清空canvas
 ctx.clearRect(0, 0, 200, 60);
 // 繪制背景
 drawBg(ctx, ctxW, ctxH, 200, 255);
 // 繪制干擾圓點(diǎn)
 drawCircle(ctx, ctxW, ctxH, 20, 5, 200, 255);
 // 繪制干擾線段
 drawLine(ctx, ctxW, ctxH, 20, 0, 255);
 // 繪制驗(yàn)證碼
 var str = drawText(ctx, ctxW, ctxH, 4, 10, 50, -30, 30, 0, 100);
 return str;
 }
 drawCanvas();
 document.getElementById('check').onclick = drawCanvas;
 </script>
</body>
 
</html>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/weixin_44635198/article/details/113921887

延伸 · 閱讀

精彩推薦
  • js教程JavaScript實(shí)現(xiàn)消消樂的源代碼

    JavaScript實(shí)現(xiàn)消消樂的源代碼

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)消消樂-源代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以...

    代碼100分12142021-12-30
  • js教程JavaScript實(shí)現(xiàn)點(diǎn)擊出現(xiàn)子菜單效果

    JavaScript實(shí)現(xiàn)點(diǎn)擊出現(xiàn)子菜單效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊出現(xiàn)子菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    weixin_551084226212022-01-19
  • js教程JS數(shù)組索引檢測(cè)中的數(shù)據(jù)類型問題詳解

    JS數(shù)組索引檢測(cè)中的數(shù)據(jù)類型問題詳解

    這篇文章主要給大家介紹了關(guān)于JS數(shù)組索引檢測(cè)中的數(shù)據(jù)類型問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考...

    行舟客11882021-12-29
  • js教程NestJs使用Mongoose對(duì)MongoDB操作的方法

    NestJs使用Mongoose對(duì)MongoDB操作的方法

    這篇文章主要介紹了NestJs使用Mongoose對(duì)MongoDB操作的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友...

    ragga-time3822022-01-22
  • js教程JS實(shí)現(xiàn)點(diǎn)擊掉落特效

    JS實(shí)現(xiàn)點(diǎn)擊掉落特效

    這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊掉落特效,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...

    小楊的旺仔沒有牛奶11772022-01-11
  • js教程微信小程序抽獎(jiǎng)組件的使用步驟

    微信小程序抽獎(jiǎng)組件的使用步驟

    這篇文章主要給大家介紹了關(guān)于微信小程序抽獎(jiǎng)組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需...

    い 狂奔的蝸牛10832021-12-29
  • js教程js 執(zhí)行上下文和作用域的相關(guān)總結(jié)

    js 執(zhí)行上下文和作用域的相關(guān)總結(jié)

    這篇文章主要介紹了js 執(zhí)行上下文和作用域的相關(guān)知識(shí)總結(jié),幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    前端Serendipity10962022-01-19
  • js教程JS獲取一個(gè)字符串中指定字符串第n次出現(xiàn)的位置

    JS獲取一個(gè)字符串中指定字符串第n次出現(xiàn)的位置

    這篇文章主要介紹了JS獲取一個(gè)字符串中指定字符串第n次出現(xiàn)的位置,文章內(nèi)容實(shí)例講解的很清晰,有需要的同學(xué)可以研究下...

    小king哥5122022-01-20
主站蜘蛛池模板: 在线日韩欧美 | 一区二区三区视频 | 久久美| 免费午夜在线视频 | 91天堂| av手机在线播放 | 黄色在线免费 | 日韩在线精品强乱中文字幕 | 亚洲第一黄色 | 久久国产亚洲 | 91亚洲精品在线 | 欧美老妇交乱视频 | 在线观看亚洲专区 | 激情五月综合 | 久久噜噜噜精品国产亚洲综合 | 久久在线视频 | av网站一区| 成人中文视频 | 日本二区不卡 | 日韩av免费在线 | 亚洲精品一区二区三区蜜桃久 | 日韩视频一区二区三区 | 蜜桃香蕉视频 | 日韩亚洲 | 一级黄色大片在线 | 亚洲电影一区二区三区 | 91精彩视频在线观看 | 日韩精品中文字幕在线观看 | 一区二区观看 | 日韩一区二区在线观看 | 欧美成年黄网站色视频 | 日日日操 | 色综合一区二区三区 | 精品国产一区三区 | 国产一区网站 | 国产精品免费视频观看 | 中文字幕四虎 | 91嫩草国产露脸精品国产 | 日本一区二区精品 | 成人午夜精品一区二区三区 | 99成人|