我已经看到很多类似的问题,但没有一个具有完全相同的标准。
我想生成一个由6个字符组成的短字符串,仅由小写字母和数字组成(理想情况下没有字母' o'和数字0)。
该字符串必须是唯一的,因为它将用作URL的一部分。我一直在使用以下内容,但每次生成时字符串都相似,我希望它们看起来非常不同。
(+new Date()).toString(36); //actually creates 8 letter string and includes o & 0
示例:查看JS小提琴并单击"保存" - 使用随机,唯一,非顺序ID更新网址。 (在这种情况下为8个字符)
有什么建议吗?
答案 0 :(得分:2)
我使用这种结构生成随机字符串:
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, '-');
答案 1 :(得分:0)
使用此代码:
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());
参见jsfiddle:http://jsfiddle.net/jondinham/aLthx08g/
答案 2 :(得分:0)
使用一个小数字并从右边拉:
(Math.random()/9e9).toString(36).slice(-6)
这使你获得不同价值的机会比从左边拉出的机会更大。
如果你需要避免欺骗,你必须记住。数据库很好,但从概念上讲:
function rnd(){
var r=(Math.random()/9e9).toString(36).slice(-6);
return rnd[r] ? rnd() : ((rnd[r]=1) && r);
}
答案 3 :(得分:0)
您也可以尝试:
new Date().getTime().toString(36).replace(/0,o,O/g,'').slice(-6)
答案 4 :(得分:0)
尝试以下操作:
////
/// @author Nikhil Saini
/// @desc Random string generator function
/// @example var key = randomString("1-a-A-$-#-*"); gives key = 6-y-Z-<-r-@
/// @invocation randomString(pattern);
/// @param pattern: A string with random character identifiers
/// @default random identifiers:-
/// 1: numerical digit,
/// a: lowercase alphabet
/// A: uppercase alphabet
/// #: alphanumeric character
/// $: special character
/// *: wildcard
/// !: lowercase alphanumeric
/// @notes:
/// 1. Characters that are not acting as identifiers will be preserved
/// 2. Character sets can be customised/added by setting randomStringTable.<character-identifier> to desirable string of possible characters
////
///dictionary for possible characters
var randomStringTable = {
"1": "1234567890",
"a": "qwertyuiopasdfghjklzxcvbnm",
"A": "QWERTYUIOPASDFGHJKLZXCVBNM",
"$": "~!@#$%^&*()_+`{}:\"<>?|\\[];',./-=",
"#": "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM",
"!": "1234567890qwertyuiopasdfghjklzxcvbnm",
"*": "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM~!@#$%^&*()_+`{}:\"<>?|\\[];',./-="
};
/// function for random string generation
var randomString = pattern => {
var randomString = "";
for (var i = 0; i < pattern.length; i++) {
var possibility = randomStringTable[pattern[i]];
randomString += possibility ?
possibility.charAt(Math.floor(Math.random() * possibility.length)) :
pattern[i];
}
return randomString;
};
console.log(randomString("aaaaaa"));
console.log(randomString("######"));
console.log(randomString("!!!!!!"));