JS生成1000個數字加字母的不重復的隨機字符串


周五,快下班了,正收拾東西准備走人,項目經理突然讓我給他做個Excel,1000個數字加字母組合的密碼,不重復,下班前給。

我直接懵了,Excel不會,估計是要寫個什么命令才能生成出來,於是想着有沒有什么軟件可以生成,找了一會兒還是放棄了。等着下班回家呢,自己來吧。

廢話少說,上代碼。

    <div id="keys"></div>
    <script>
        // 生成十位字母加數字隨機數
        var arr = [];
        for (var i=0;i<1000;i++) {
            var n = Math.random().toString(36).substr(2,10);
            arr.push(n);
        }        
        // 去重
        var ukeys = [];
          for (var i = 0; i < arr.length; i++) {
            if (ukeys.indexOf(arr[i]) == -1) {
                console.log(arr[i])
                ukeys.push(arr[i]);
            }
          }
          // 數組處理,便於在Html文檔中顯示
        var keys = '';
        for (var i=0;i<ukeys.length;i++) {
            ukeys[i] += '<br>'
            keys += ukeys[i]
        }
        $('#keys').html(keys);
        console.log('去重后的密碼個數:' + ukeys.length);
    </script>

 

Math.random()    輸出0到1(包括0,不包含1)的隨機數。
toString(16)        將隨機數轉換為16進制的字符串。
substring(2, 10)  截取字符串,因為隨機數大於等於0小於1,前兩位是 " 0. " , substring(2, 10)從第三位開始截取十位。

去重。檢查數組中的每一個元素,如果當前元素在新的數組中已經存在則忽略,否則加入倒新數組中。最后得到的新數組就是所要的不重復的密碼。

至此已經得到了1000個數字加字母組合的密碼,而且不重復,但是由於要拷貝到excel中,如果直接在控制台中打印然后復制,結果是這樣的:

randomCode.html:23   ud6202zt55
randomCode.html:23   oqu89g76tu
randomCode.html:23   m5cibg4jv1

因此需要對結果進行格式化以方便復制,如下:

即在每一項元素后面添加一個換行標簽<br>, 然后在頁面中顯示出來,效果如下:

然后全選粘貼到Excel就ok啦。 

 

小結:生成密鑰數組主要用到了JS的 Math.random() 、toString(36)、substr(start, n)方法,關鍵在於數值轉換成16進制字符串的過程。

數組去重主要用到了 indexOf() 方法。數組去重是個十分經典的問題,方法很多,個人認為使用indexOf()逐項排除是最簡單的,其他的方法有時間也需要研究一下。

整個過程的代碼還是十分簡單和基礎的,照這樣的方法,只要系統承受得了,生成十萬個一百萬個數十位不重復的密鑰也是沒有任何問題的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM