创建简单的唯一预订ID功能

时间:2017-06-15 11:26:45

标签: javascript

我需要一个特殊的独特预订ID,方便客户通过电话阅读。

它应该是5个字符长,并且只使用这些字母:

var letters = "ABCDEFGHJKMNPQRSTUXY";

我在stackoverflow上发现了这个函数,但是很难让它从我的字母中取出字符并将自己限制为5个字符。

var uniqueId = function() {
  return Math.random().toString(36).substr(2, 16);
};

任何帮助将不胜感激: - )

3 个答案:

答案 0 :(得分:1)

像这样的东西



var letters = "ABCDEFGHJKMNPQRSTUXY";
var uniqueId = function() {
  var text = "";
  for (var i = 0; i < 5; i++) {
    text += letters.charAt(Math.floor(Math.random() * letters.length));
  }
  return text;
};
console.log(uniqueId());
&#13;
&#13;
&#13;

[number of possible char]^[lenght of the generatet id] - 这样您就拥有了3.200.000个唯一ID ... 3.200.001&#39; ID不再具有独特性......

如果您想要将唯一ID的数量加倍,请考虑大/小的情况...

&#13;
&#13;
var letters = "ABCDEFGHJKMNPQRSTUXYabcdefghjkmnpqrstuxy";
    var uniqueId = function() {
      var text = "";
      for (var i = 0; i < 5; i++) {
        text += letters.charAt(Math.floor(Math.random() * letters.length));
      }
      return text;
    };
    console.log(uniqueId());
&#13;
&#13;
&#13;

答案 1 :(得分:1)

请参阅下面的函数,uniqueId()获取一个包含五个字符的字符串(该函数可能会多次生成相同的字符串,因此它并不是唯一的):

function uniqueId(stringLength, possible)
{
  stringLength = stringLength || 5;
  possible = possible || "ABCDEFGHJKMNPQRSTUXY";
  var text = "";

  for(var i = 0; i < stringLength; i++) {
    var character = getCharacter(possible);
    while(text.length > 0 && character === text.substr(-1)) {
      character = getCharacter(possible);
    }
    text += character;
  }

  return text;
}

function getCharacter(possible) {
  return possible.charAt(Math.floor(Math.random() * possible.length));
}

答案 2 :(得分:1)

其他一些人只是打败了我,但这里有一个相当容易阅读的替代方案。它还包含不允许2个连续字符相同(在OP后面的注释中添加)

 function uniqueId()
 {
        var letters = "ABCDEFGHJKMNPQRSTUXY";
        var result="";
        while (result.length<5)
        {
            var rand_int = Math.floor((Math.random() * 19) + 1);
            var rand_chr= letters[rand_int];
            if (result.substr(-1, 1)!=rand_chr) result+=rand_chr;
        }
        return (result);
 }