Javascript 生成随机的6个字符的小写字符串

Javascript 生成随机的6个字符的小写字符串,javascript,Javascript,我见过许多类似的问题,但没有一个标准完全相同 我想生成一个由6个字符组成的短字符串,该字符串仅由小写字母和数字组成(理想情况下不包含字母“o”和数字0) 字符串必须是唯一的,因为它将用作URL的一部分。我一直在使用以下内容,但是每次生成字符串时,字符串都是相似的,我希望它们看起来非常不同 (+new Date()).toString(36); //actually creates 8 letter string and includes o & 0 示例:查看JS fiddle并单击“

我见过许多类似的问题,但没有一个标准完全相同

我想生成一个由6个字符组成的短字符串,该字符串仅由小写字母和数字组成(理想情况下不包含字母“o”和数字0)

字符串必须是唯一的,因为它将用作URL的一部分。我一直在使用以下内容,但是每次生成字符串时,字符串都是相似的,我希望它们看起来非常不同

(+new Date()).toString(36); //actually creates 8 letter string and includes o & 0
示例:查看JS fiddle并单击“保存”-url使用随机、唯一、非顺序的id进行更新。(本例中为8个字符)


有什么建议吗?

我使用这个结构来生成随机字符串:

Math.random().toString(36).slice(2);
如果使用
slice(0,6)
对其进行改进,您将得到6个字符的随机字符串:

Math.random().toString(36).slice(2).slice(0, 6);
Math.random().toString(36).slice(2, 8);
但您不能生成随机字符串并确保该字符串是唯一的。总是有可能生成的字符串不是唯一的,所以这是不好的做法

UPD:如果您想使用
Date
,当然可以:

Date.now().toString(36).slice(0, 6);
对于这种变体,我不能保证它是独一无二的

如果要删除
0
O
,则可以像这样使用smth:

Date.now().toString(36).slice(0, 6).replace(/[o,O,0]+/g, '-');
这里我用破折号替换小写字母
o
、大写字母
o
和数字
0
。你想用什么就用什么

UPD:如果需要唯一值,则不需要切片字符串:

Date.now().toString(36).replace(/[o,O,0]+/g, '-');
使用此代码:

var chars = [
  "0","1","2","3","4","5","6","7","8","9",
  "a","b","c","d","e","f","g","h","i","j",
  "k","l","m","n","o","p","q","r","s","t",
  "u","v","w","x","y","z"
];

function get6RandomChars() {
  var char1 = chars[Math.floor(Math.random()*36)];
  var char2 = chars[Math.floor(Math.random()*36)];
  var char3 = chars[Math.floor(Math.random()*36)];
  var char4 = chars[Math.floor(Math.random()*36)];
  var char5 = chars[Math.floor(Math.random()*36)];
  var char6 = chars[Math.floor(Math.random()*36)];

  return ""+char1+char2+char3+char4+char5+char6;
}

alert(get6RandomChars());

请参阅jsiddle:

使用一个小数字并从右侧拖动:

 (Math.random()/9e9).toString(36).slice(-6)
与从左侧拉动相比,这使您获得不同值的机会大得多

如果你需要避免被骗,你就必须记住。db是好的,但在概念上:

function rnd(){
  var r=(Math.random()/9e9).toString(36).slice(-6);
  return rnd[r] ? rnd() : ((rnd[r]=1) && r);
}
您也可以尝试:

new Date().getTime().toString(36).replace(/0,o,O/g,'').slice(-6)
请尝试以下操作:

////
///@作者Nikhil Saini
///@desc随机字符串生成器函数

///@example var key=randomString(“1-a-a-$-#-*”;gives key=6-y-Z-谢谢-但不能保证以前没有创建过相同的字符串,是吗?或者我弄错了吗?
Math.random()
是基于日期来确保唯一性的吗?零和o’我并不是说我不想使用日期-你的第一个例子保证唯一性吗?@tommyd456这里提供的所有答案都不能保证这是唯一的。随机值被复制的概率总是存在的。当然,还有一点机会。我不太确定
Math.random()
是如何工作的,但这段代码是否能保证不会产生两次相同的字符串?很可能是对这个get6RandomChars函数的100万次调用,你不会面对相同的代码。必须绝对保证生成一个唯一的字符串来存储随机值。这是一种不好的做法。随着时间的推移,它可能会溢出。好的,请参阅我编辑的答案的rnd()函数。不过,20亿个组合还是相当不错的。使用8个字符就意味着3万亿…@EugeneObrezkov:你知道还有其他方法可以同时使用不可猜测和不可重复的ID吗?这仍然会给stringsHi tommyd456带来“顺序感”。我认为您需要在服务器端完成一些事情,因为您需要保证您的ID是唯一的。我的意思是,你不应该在客户端用JS做这件事。是的,我绝对同意