【问题标题】:Creating a simple Unique Booking ID function [duplicate]创建一个简单的唯一预订 ID 函数 [重复]
【发布时间】:2017-11-17 21:04:20
【问题描述】:

我需要一个特殊的唯一预订 ID,以便客户通过电话轻松读取。

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

var letters = "ABCDEFGHJKMNPQRSTUXY";

我在 stackoverflow 上找到了这个函数,但很难让它从我的信件中获取字符并将其自身限制为 5 个字符。

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

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

【问题讨论】:

  • 为什么只有 5 个?您将自己限制在少数“独特”订单上。除非您希望保持小规模?
  • "small number" ehh .. 尝试计算 20x20x20x20x20 :-D 如果我有那么多预订,我保证将其扩展到 6 个字符 :-D
  • 检查我链接的副本(我可以免费入住@Pattaya 吗?:D)
  • @torbenrudgaard 编辑您的帖子以添加此要求。 (我看了你的资料嘿嘿)

标签: javascript


【解决方案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());

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

如果您想将唯一 ID 的数量翻倍,请考虑大写/小写...

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());

【讨论】:

  • 有没有办法避免两个相同的字母并排? “ABCAB”是可以的 - “ABBCD”不是。
  • 这样的例子可以解决这个问题——因为演示只使用了 AB 字母——jsfiddle.net/zxos7456/1(现在考虑到检查字母——也可以检查索引)
【解决方案2】:

请参阅下面的函数,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));
}

【讨论】:

  • 有没有办法避免两个相同的字母并排? “ABCAB”是可以的 - “ABBCD”不是。
  • 是的,请参阅更新。
  • 完美! - 正是我所需要的 - Ganhammar,你刚刚将它添加到我们的全局函数库中 :-))) 谢谢。
  • @torbenrudgaard 失败者可以免费前往芭堤雅吗? :p
【解决方案3】:

好吧,其他一些人刚刚击败了我,但这里有一个相当容易阅读的替代方案。它还包含不允许 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);
 }

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多