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