激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JavaScript - js教程 - js實現驗證碼干擾(動態)

js實現驗證碼干擾(動態)

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

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

本文實例為大家分享了js實現驗證碼動態干擾的具體代碼,供大家參考,具體內容如下

效果一

js實現驗證碼干擾(動態)

效果二

js實現驗證碼干擾(動態)

代碼一

?
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簡單驗證碼使用</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>
 //頁面加載時,生成隨機驗證碼
 window.onload=function(){
 createCode(4);
 }
 
 //生成驗證碼的方法
 function createCode(length) {
 var code = "";
 var codeLength = parseInt(length); //驗證碼的長度
 var checkCode = document.getElementById("checkCode");
 所有候選組成驗證碼的字符,當然也可以用中文的
 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');
 //循環組成驗證碼的字符串
 for (var i = 0; i < codeLength; i++)
 {
 //獲取隨機驗證碼下標
 var charNum = Math.floor(Math.random() * 62);
 //組合成指定字符驗證碼
 code += codeChars[charNum];
 }
 if (checkCode)
 {
 //為驗證碼區域添加樣式名
 checkCode.className = "code";
 //將生成驗證碼賦值到顯示區
 checkCode.innerHTML = code;
 }
 }
 
 //檢查驗證碼是否正確
 function validateCode()
 {
 //獲取顯示區生成的驗證碼
 var checkCode = document.getElementById("checkCode").innerHTML;
 //獲取輸入的驗證碼
 var inputCode = document.getElementById("inputCode").value;
 console.log(checkCode);
 console.log(inputCode);
 if (inputCode.length <= 0)
 {
 alert("請輸入驗證碼!");
 }
 else if (inputCode.toUpperCase() != checkCode.toUpperCase())
 {
 alert("驗證碼輸入有誤!");
 createCode(4);
 }
 else
 {
 alert("驗證碼正確!");
 }
 }
</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>驗證碼:</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驗證碼</title>
</head>
<body>
 <canvas width="200" height="60" id="check" style="border:1px solid #000;">您的瀏覽器不支持canvas標簽!</canvas>
 <script>
 var ctx = document.getElementById("check").getContext("2d");
 var ctxW = document.getElementById("check").clientWidth;
 var ctxH = document.getElementById("check").clientHeight;
 /**
 * 產生一個隨機數 可設置隨機數區間
 * @param {[Number]} min [隨機數區間下限]
 * @param {[Number]} max [隨機數區間上限]
 * @return {[Number]} [返回一個在此區間的隨機數]
 */
 
 function ranNum(min, max) {
 return Math.random() * (max - min) + min;
 }
 /**
 * 返回一個隨機顏色 可設置顏色區間
 * @param {[Number]} min [顏色下限]
 * @param {[Number]} max [顏色上限]
 * @return {[String]} [隨機顏色]
 */
 
 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})`;
 }
 /**
 * 隨機字符串數組
 * @return {[Array]} [隨機數組]
 */
 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 [繪制驗證碼的字數]
 * @param {[Number]} fsMin [字體大小下限]
 * @param {[Number]} fsMax [字體大小上限]
 * @param {[Number]} frMin [字體旋轉偏移下限]
 * @param {[Number]} frMax [字體旋轉偏移上限]
 * @param {[Number]} min [顏色下限]
 * @param {[Number]} max [顏色上限]
 * @return {[String]} [隨機字符串]
 */
 
 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);
 // 保存繪制的狀態
 canvasId.save();
 // context.translate(x,y);
 // x 添加到水平坐標(x)上的值
 // y 添加到垂直坐標(y)上的值
 // 偏移
 
 canvasId.translate(canvasW / num * i + canvasW / 20, 0);
 // 變換角度
 canvasId.rotate(ranNum(frMin, frMax) * Math.PI / 180);
 // context.fillText(text,x,y,maxWidth);
 // text 規定在畫布上輸出的文本。
 // x 開始繪制文本的 x 坐標位置(相對于畫布)。
 // y 開始繪制文本的 y 坐標位置(相對于畫布)。
 // maxWidth 可選。允許的最大文本寬度,以像素計。
 canvasId.fillText(char, 0, (canvasH + fs) / 2.5, canvasW / num);
 // 返回之前保存過的路徑狀態和屬性
 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);
 }
 
 /**
 * 繪制干擾 圓點
 * @param {[String]} canvasId [canvas的id]
 * @param {[Number]} canvasW [canvas的width]
 * @param {[Number]} canvasH [canvas的height]
 * @param {[Number]} num [繪制的數量]
 * @param {[Number]} r [圓點半徑]
 * @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 坐標。
 // y 圓的中心的 y 坐標。
 // r 圓的半徑。
 // sAngle 起始角,以弧度計。(弧的圓形的三點鐘位置是 0 度)。
 // eAngle 結束角,以弧度計。
 // counterclockwise 可選。規定應該逆時針還是順時針繪圖。False = 順時針,true = 逆時針。
 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 [繪制的數量]
 * @param {[Number]} min [下限]
 * @param {[Number]} max [上線]
 */
 
 function drawLine(canvasId, canvasW, canvasH, num, min, max) {
 for (var i = 0; i < num; i++) {
 // 開始繪制 (拿起筆)
 canvasId.beginPath();
 // 繪制開始點
 canvasId.moveTo(ranNum(0, canvasW), ranNum(0, canvasH));
 // 繪制結束點
 canvasId.lineTo(ranNum(0, canvasW), ranNum(0, canvasH));
 canvasId.strokeStyle = ranColor(min, max);
 canvasId.stroke();
 canvasId.closePath();
 }
 }
 // 繪制驗證碼
 function drawCanvas() {
 // 清空canvas
 ctx.clearRect(0, 0, 200, 60);
 // 繪制背景
 drawBg(ctx, ctxW, ctxH, 200, 255);
 // 繪制干擾圓點
 drawCircle(ctx, ctxW, ctxH, 20, 5, 200, 255);
 // 繪制干擾線段
 drawLine(ctx, ctxW, ctxH, 20, 0, 255);
 // 繪制驗證碼
 var str = drawText(ctx, ctxW, ctxH, 4, 10, 50, -30, 30, 0, 100);
 return str;
 }
 drawCanvas();
 document.getElementById('check').onclick = drawCanvas;
 </script>
</body>
 
</html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

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

延伸 · 閱讀

精彩推薦
  • js教程JavaScript實現消消樂的源代碼

    JavaScript實現消消樂的源代碼

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

    代碼100分12142021-12-30
  • js教程JavaScript實現點擊出現子菜單效果

    JavaScript實現點擊出現子菜單效果

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

    weixin_551084226212022-01-19
  • js教程JS數組索引檢測中的數據類型問題詳解

    JS數組索引檢測中的數據類型問題詳解

    這篇文章主要給大家介紹了關于JS數組索引檢測中的數據類型問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考...

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

    NestJs使用Mongoose對MongoDB操作的方法

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

    ragga-time3822022-01-22
  • js教程JS實現點擊掉落特效

    JS實現點擊掉落特效

    這篇文章主要介紹了JS實現點擊掉落特效,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

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

    微信小程序抽獎組件的使用步驟

    這篇文章主要給大家介紹了關于微信小程序抽獎組件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    い 狂奔的蝸牛10832021-12-29
  • js教程js 執行上下文和作用域的相關總結

    js 執行上下文和作用域的相關總結

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

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

    JS獲取一個字符串中指定字符串第n次出現的位置

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

    小king哥5122022-01-20
主站蜘蛛池模板: 久久久久久久久久性 | 国产精品视频一区二区三区四区五区 | 新久久久久久 | 一级毛片免费在线 | 91在线看黄| 得得啪在线视频 | 免费黄色一级网站 | www.射| 亚洲国产视频网 | 性少妇chinesevideo | 亚洲第一精品在线 | 激情综合在线观看 | 免费在线成人网 | 国产日产精品一区二区三区四区 | 欧美一级淫片免费视频黄 | 中文日韩欧美 | 看91视频 | 日韩视频一二三 | 国产美女视频一区二区三区 | 一本到免费视频 | 国产精品毛片va一区二区三区 | 成人毛片视频免费看 | 欧美日韩国产综合网 | 91精品国产乱码久久久久久久久 | 久久草在线视频 | 欧美一级高清免费 | 成人免费在线视频 | 欧美成人一区免费视频 | 羞羞视频免费视频欧美 | av黄色片网站 | 欧美视频一二三区 | 精品国产一区二区三区久久久蜜 | 欧美精品久久天天躁 | 国产亚洲综合一区二区 | 夜间福利网站 | 亚洲综合色视频在线观看 | 国产精品成人免费一区久久羞羞 | 久久精品视频在线免费观看 | 在线播放一级片 | 香蕉在线看 | 国产不卡av在线 |