如何生成赢得';在jQuery中不会出现两次吗?

如何生成赢得';在jQuery中不会出现两次吗?,jquery,Jquery,如何生成一个只有8个字符长的随机字符串,该字符串在jQuery中不会出现两次。为什么不使用当前时间(作为一个整数)?这将生成所需的随机数范围,并保留以前生成的数的历史记录,因此它将不会两次生成相同的数: function generateRandom() { if (!generateRandom.prevNums) { generateRandom.prevNums = {}; } var random; do { random

如何生成一个只有8个字符长的随机字符串,该字符串在jQuery中不会出现两次。

为什么不使用当前时间(作为一个整数)?

这将生成所需的随机数范围,并保留以前生成的数的历史记录,因此它将不会两次生成相同的数:

function generateRandom() {
    if (!generateRandom.prevNums) {
        generateRandom.prevNums = {};
    }
    var random;
    do {
        random = Math.floor((Math.random() * (99999999 - 10000000 + 1)) + 10000000);
    } while (generateRandom.prevNums[random])
    generateRandom.prevNums[random] = true;
    return(random.toString());
}

这里的工作演示:

我想这正是您想要的。在代码中的任何时候,您都可以通过
rString.get()
请求一个随机的8字符字符串:

var rString={
get:function(){
var_this=这个,
随机字符串,
charset=“abcdefghijklmnopqrstuvwxyz012456789!@$%^&*()-=”分割(“”);
var生成=函数(len){
var输出=“”;

对于(var i=0;i如果您的意思是不会在任何地方出现两次(意思是在其他人的计算机上,或在客户端计算机的不同浏览器中),那么简单的回答是,在纯javascript中,这根本不可能,因为这依赖于获取用户的网络SSID作为密钥,而javascript没有访问权限

如果你指的是一个随机数,它在几天内不会在用户的客户端上重复(或者直到他们清除cookie),那么抓取一个随机数,从中提取8位数字并将其放入cookie中。然后在获得下一个数字时对该cookie进行测试(并存储该数字)。这保证了该用户在该浏览器中的编号是唯一的


如果您的意思是不会在给定的会话中简单地重复,那么jfriend的答案是您最好的选择。

除非您能够检查您以某种方式生成的数字的历史记录,否则这将很困难。随机和不发生两次的规格是不兼容的-如果它是真正随机的,那么显然任何序列发生的概率都不会降低依赖于过去发生的历史。我怀疑您想要的是具有最大长度序列的伪随机序列生成器-然后您可以存储此类生成器的状态,而不是存储所有过去的序列。该网站提供了有关如何生成最大长度伪随机序列的详细信息。取决于您必须使用的生命周期在上面操作,8位数字可能不够,如果你需要一大堆随机数,那么当前时间可能不够快。对于一个不重复的唯一数字来说,时间通常是一件好事,但是8位数字的限制可能会妨碍这个特殊用途。这不会是8个字符长。很好的主意就是缩减它使用jQuery,日期中的整数随着时间的推移会不一样。非常好的主意!如果OP对给定的会话感兴趣,这将很好地工作。您需要跨多个会话将这些存储在cookie中,如果OP对跨多个浏览器的唯一数字感兴趣(更不用说用户),即使这样也不起作用.@Dr.Dredel-如果您需要跨多个浏览器的唯一性,则必须有一个中央服务器。没有客户端解决方案可以做到这一点。如果您需要跨一个浏览器中的多个会话使用它,则必须有一个位置来存储先前生成的数字(如HTML5存储)。OP的问题中没有具体说明这两项要求(对许多细节含糊不清)。同意……我只是在回答他的问题(含糊不清地未说明)基础。正如我所说,如果他的要求和你预期的一样,你的答案肯定是非常棒的。我只是想澄清一下……你永远不知道什么对你来说是显而易见的,对提问者来说可能是完全不透明的。
   var rString = {
       get : function() {
           var _this = this,
               randomString,
               charset = "abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-=_+".split('');

           var generate = function(len) {
               var output = '';
               for(var i=0; i<len; i++) {
                   output += charset[ Math.floor(Math.random()*charset.length) ];
               }
               return output;
           }

           var inArray = function(arr, item) {
               for(var i=0; i<arr.length; i++) {
                   if(arr[i] === item) {
                       return true;
                   }
               }
               return false;
           }

           while( true ) {
               if( !inArray( this.previous, randomString = generate(8) ) ) {
                   this.previous.push(randomString);
                   return randomString;
               }
           }

       },
       previous : []
   };