基于JS實(shí)現(xiàn)一個(gè)隨機(jī)生成驗(yàn)證碼功能
效果展示
實(shí)現(xiàn)原理
1. html:一般就是一個(gè)div: <div id="code"></div> ,樣式根據(jù)需求設(shè)計(jì)。
2. JS:1)將所有的驗(yàn)證碼所用的字符放在一個(gè)字符串中
2)在這個(gè)字符串的字符個(gè)數(shù)以內(nèi),隨機(jī)生成索引號(hào)
3)根據(jù)索引號(hào)查找對(duì)應(yīng)字符,拼接成驗(yàn)證碼的字符串
代碼實(shí)現(xiàn)
HTML:
<div id="code"></div>
CSS:
* { margin: 0; padding: 0; } div { width: 80px; height: 30px; font-size: 18px; line-height: 30px; text-align: center; color: #333; border: 1px solid red; margin: 100px auto; cursor: pointer; }
JavaScript:
var codeStr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; var oDiv = document.getElementById('code'); // 用來生成隨機(jī)整數(shù) function getRandom(n, m) { // param: (Number, Number) n = Number(n); m = Number(m); // 確保 m 始終大于 n if (n > m) { var temp = n; n = m; m = temp; } // 下有詳細(xì)說明 return Math.floor(Math.random()*(m - n) + n); } // 將隨機(jī)生成的整數(shù)下標(biāo)對(duì)應(yīng)的字母放入div中 function getCode() { var str = ''; // 驗(yàn)證碼有幾位就循環(huán)幾次 for (var i = 0;i < 4;i ++) { var ran = getRandom(0, 62); str += codeStr.charAt(ran); } oDiv.innerHTML = str; } getCode();// 調(diào)用函數(shù),頁面刷新也會(huì)刷新驗(yàn)證碼 // 點(diǎn)擊刷新驗(yàn)證碼 oDiv.onclick = function(){ getCode(); }
代碼分析
JS:
1)將所有的驗(yàn)證碼所用的字符放在一個(gè)字符串中
-- > 代碼第1行,除了字母數(shù)字也可放入中文漢字等。
2)在這個(gè)字符串的字符個(gè)數(shù)以內(nèi),隨機(jī)生成索引號(hào)
-- > 第4行的函數(shù)用于生成隨機(jī)整數(shù),參數(shù) (n, m)為數(shù)字,Number()確保是數(shù)字
默認(rèn)m > n,防止傳參有誤,用if判斷后改正
Math.random() -- > [0,1)
Math.random() * (m - n) -- > [0, m - n)
Math.random() * (m - n) + n -- > [n, m)
為了能將codeStr所有的下標(biāo)都取到,上述m若是codeStr.length,想要取值能取到最后一位,再使用Math.floor()向下取整。
n 為 0,m 為 codeStr.length 則隨機(jī)范圍為codeStr的所有元素下標(biāo)。例(n, m) -- > (0, 62)計(jì)算后的取值范圍:下標(biāo)為[0, 61]的整數(shù)。
3)根據(jù)下標(biāo)查找對(duì)應(yīng)元素,拼接成驗(yàn)證碼的字符串
第17行的函數(shù)getCode()獲取字符串中對(duì)應(yīng)元素,并拼接成字符串返回到頁面中。最后點(diǎn)擊div可不斷生成隨機(jī)驗(yàn)證碼。
完整代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>隨機(jī)生成驗(yàn)證碼</title> <style> * { margin: 0; padding: 0; } div { width: 80px; height: 30px; font-size: 18px; line-height: 30px; text-align: center; color: #333; border: 1px solid red; margin: 100px auto; cursor: pointer; } </style> </head> <body> <div id="code"></div> <script> var codeStr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; var oDiv = document.getElementById('code'); // 用來生成隨機(jī)整數(shù) function getRandom(n, m) { // param: (Number, Number) n = Number(n); m = Number(m); // 確保 m 始終大于 n if (n > m) { var temp = n; n = m; m = temp; } return Math.floor(Math.random()*(m - n) + n); } // 將隨機(jī)生成的整數(shù)下標(biāo)對(duì)應(yīng)的字母放入div中 function getCode() { var str = ''; // 驗(yàn)證碼有幾位就循環(huán)幾次 for (var i = 0;i < 4;i ++) { var ran = getRandom(0, 62); str += codeStr.charAt(ran); } oDiv.innerHTML = str; } getCode();// 調(diào)用函數(shù),頁面刷新也會(huì)刷新驗(yàn)證碼 // 點(diǎn)擊刷新驗(yàn)證碼 oDiv.onclick = function(){ getCode(); } </script> </body> </html>
總結(jié)
以上所述是小編給大家介紹的基于JS實(shí)現(xiàn)一個(gè)隨機(jī)生成驗(yàn)證碼功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- js實(shí)現(xiàn)隨機(jī)數(shù)字字母驗(yàn)證碼
- js隨機(jī)生成一個(gè)驗(yàn)證碼
- JS如何生成隨機(jī)驗(yàn)證碼
- JavaScript 隨機(jī)驗(yàn)證碼的生成實(shí)例代碼
- 用jsp頁面生成隨機(jī)的驗(yàn)證數(shù)字碼示例
- JavaScript實(shí)現(xiàn)隨機(jī)五位數(shù)驗(yàn)證碼
- js實(shí)現(xiàn)隨機(jī)8位驗(yàn)證碼
- JS實(shí)現(xiàn)4位隨機(jī)驗(yàn)證碼
- JS 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能
- Javascript實(shí)現(xiàn)仿QQ隨機(jī)數(shù)驗(yàn)證
相關(guān)文章
JavaScript模塊管理的簡單實(shí)現(xiàn)方式詳解
這篇文章主要介紹了JavaScript模塊管理的簡單實(shí)現(xiàn)方式,它方便組織你的代碼,提高項(xiàng)目的可維護(hù)性。一個(gè)項(xiàng)目的可維護(hù)性高不高,也體現(xiàn)一個(gè)程序員的水平,在如今越來越復(fù)雜的前端項(xiàng)目,這一點(diǎn)尤為重要。,需要的朋友可以參考下2019-06-06學(xué)習(xí)JavaScript設(shè)計(jì)模式之享元模式
這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的享元模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下2016-01-01JavaScript數(shù)組函數(shù)unshift、shift、pop、push使用實(shí)例
這篇文章主要介紹了JavaScript數(shù)組函數(shù)unshift、shift、pop、push使用實(shí)例,本文先是講解了聲明數(shù)組的方法,然后對(duì)4個(gè)函數(shù)使用給出了一些例子,需要的朋友可以參考下2014-08-08Object.keys()、Object.values()、Object.entries()用法總結(jié)
本文主要介紹了Object.keys()、Object.values()、Object.entries()用法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Javascript同時(shí)聲明一連串(多個(gè))變量的方法
這篇文章主要給大家介紹了利用Javascript聲明一連串(也就是多個(gè))變量的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01