1

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

它应该有5个字符长,并且只能使用以下字母:

var letters=“ABCDEFGHJKMNPQRSTUXY”;

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

var uniqueId=函数(){return Math.random().toString(36).subtr(2,16);};

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

12
  • 1
    为什么只有5个?您将自己限制在少数“独特”订单上。除非你想保持身材苗条? 评论 2017年6月15日11:27
  • 请参阅是否在JavaScript中创建GUID/UUID?
    – 萨特帕
    评论 2017年6月15日11:28
  • 1
    “小数字”嗯。。尝试计算20x20x20x20x20:-D如果我有那么多预订,我承诺将其扩展为6个字符:-D 评论 2017年6月15日11:28
  • 2
    检查我链接的副本(我可以在芭堤雅免费住宿吗?:D)
    – 除草剂
    评论 2017年6月15日11:30
  • 1
    @torbenrudgaard编辑您的帖子以添加此要求。(我看了你的个人资料呵呵)
    – 除草剂
    评论 2017年6月15日11:39

3个答案

重置为默认值
2

参见以下功能,唯一ID()对于五个字符的字符串(函数可能多次生成同一字符串,因此它不是真正唯一的):

函数uniqueId(字符串长度,可能){stringLength=字符串长度||5;可能=可能||“ABCDEFGHJKMNPQRSTUXY”;var text=“”;for(var i=0;i<字符串长度;i++){var character=getCharacter(可能);while(text.length>0&&character===text.substr(-1)){character=getCharacter(可能);}text+=字符;}返回文本;}函数getCharacter(可能){return possible.charAt(Math.floor(Math.random()*possible.length));}
4
  • 有没有办法避免两个相同的字母并排出现?“ABCAB”正常-“ABBCD”不正常。 评论 2017年6月15日11:38
  • 是,请参阅更新。 评论 2017年6月15日11:43
  • 1
    完美!-正是我所需要的-甘哈马尔,你刚刚把它加入我们的全局函数库:-))谢谢。 评论 2017年6月15日11:45
  • 1
    @torbenrudgaard失败者可以免费去芭堤雅吗第页 评论 2017年6月15日11:49
1

有点像这样

var letters=“ABCDEFGHJKMNPQRSTUXY”;var uniqueId=函数(){var text=“”;对于(var i=0;i<5;i++){text+=letters.charAt(Math.floor(Math.random()*letters.length));}返回文本;};console.log(uniqueId());

[可能的字符数]^[生成集id的长度]-所以你将拥有3.200.000个唯一ID…3.200.001个ID将不再是唯一的。。。

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

var letters=“ABCDEFGHJKMNPQRSTUXYabcdefghjkmnpqrstuxy”;var uniqueId=函数(){var text=“”;对于(var i=0;i<5;i++){text+=letters.charAt(Math.floor(Math.random()*letters.length));}返回文本;};console.log(uniqueId());

2
  • 有没有办法避免两个相同的字母并排出现?“ABCAB”正常-“ABBCD”不正常。 评论 2017年6月15日11:38
  • 1
    像这个例子可以解决这个问题——因为演示只使用AB字母-jsfiddle.net/zxos7456/1(现在考虑检查字母-也可能检查索引) 评论 2017年6月15日11:41
1

好吧,其他一些人刚刚击败了我,但这里有一个相当容易阅读的选择。它还包括不允许两个连续字符相同(如OP在后面的注释中添加的)

函数uniqueId(){var letters=“ABCDEFGHJKMNPQRSTUXY”;var结果=“”;while(结果长度<5){var rand_int=数学楼层((Math.random()*19)+1);var rand_chr=字母[rand_int];if(result.substr(-1,1)=rand_chr)结果+=rand_ch;}返回(结果);}

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.