关于javascript:创建一个简单的唯一预订ID函数

Creating a simple Unique Booking ID function

本问题已经有最佳答案,请猛点这里访问。

我需要一个特别独特的预订ID,这是方便客户通过电话读出。

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

1
var letters ="ABCDEFGHJKMNPQRSTUXY";

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

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

如有任何帮助,我们将不胜感激:—)


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

1
2
3
4
5
6
7
8
9
10
11
12
 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);
 }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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));
}


像这样的东西

1
2
3
4
5
6
7
8
9
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());

[number of possible char]^[lenght of the generatet id]-所以你会有3200.000个唯一的ID…3.200.001的ID将不再是唯一的…

如果您想将唯一ID的数量增加一倍,请考虑大小写…

1
2
3
4
5
6
7
8
9
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());