龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

避免悲剧 JavaScript密码生成器

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
我为大家准备了一个密码生成工具,有0-9和a-k的英文字母组成,数字是乱序排列。字母随机一个替换掉一个数字,生成一个长度为10的密码。 !DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN

我为大家准备了一个密码生成工具,有0-9和a-k的英文字母组成,数字是乱序排列。字母随机一个替换掉一个数字,生成一个长度为10的密码。

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  2.         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    
  3. <html xmlns="http://www.w3.org/1999/xhtml">    
  4. <head>    
  5.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    
  6.     <title></title>    
  7. </head>    
  8. <body>    
  9. <div>    
  10.      
  11. <input id="strat" type="button" value="开始" />    
  12. <textarea rows="10" cols="25" id="password"></textarea>    
  13. </div>    
  14. <script type="text/javascript">    
  15. void function(window,doc,undefined){    
  16.     var array=[],text='abcdefghijk',key,password='',btn=doc.getElementById('strat'),textarea=doc.getElementById('password');    
  17.      
  18.     function unorderedArray(array){    
  19.         if(({}).toString.call(array).indexOf('Array')===-1) return;    
  20.         var arr=[],value=array.toString();    
  21.         arr=array.sort(function(){return Math.random()>0.5?-1:1;});    
  22.         (arr.toString()===value) && arguments.callee(array);    
  23.         return arr;    
  24.     }    
  25.      
  26.      
  27.     btn.onclick=function(){    
  28.         key=Math.random().toFixed(1) * 10-1;    
  29.         array=[0,1,2,3,4,5,6,7,8,9];    
  30.         password=unorderedArray(array);    
  31.         password[key]=text[key];    
  32.         textarea.innerHTML=password.join('');    
  33.     }    
  34. }(window,document);    
  35.      
  36.      
  37.     //console.log(unorderedArray(a));    
  38. </script>    
  39.      
  40. </body>    
  41. </html>   

怎样乱序排列数组,本人数学比较烂。搜索了一下给array的sort传入一个这样的函数。

sort真是强大啊。

  1. function unorderedArray(array){  
  2.         if(({}).toString.call(array).indexOf('Array')===-1) return;  
  3.         var arr=[],value=array.toString();  
  4.         arr=array.sort(function(){return Math.random()>0.5?-1:1;});  
  5.         (arr.toString()===value) && arguments.callee(array);  
  6.         return arr;  

在用这个方法的时候要避免生成的数组和传入的数组一样,颇废了点功夫,因为数组是复杂类型,有修改所有的都会有变化。所以用一个变量去缓存了传入的数组的值value=array.toString(),然后我生成的数组的值比较一下如果相对就递归一次。保证生成的数组不是顺序的。

用下面的代码生成一个0-9的随机数序号

  1. Math.random().toFixed(1) * 10-1; 

用这个序号去获得a-k的一个字母,用这个字母去替换数组中序号相应位置的数字。

在用数组的join方法把获得的数组字符串化

  1. password.join(''); 

获得一个密钥。

原文:http://www.cnblogs.com/enix/archive/2011/12/22/2297913.html

精彩图集

赞助商链接