我需要一个特殊的独特预订ID,方便客户通过电话阅读。
它应该是5个字符长,并且只使用这些字母:
var letters = "ABCDEFGHJKMNPQRSTUXY";
我在stackoverflow上发现了这个函数,但是很难让它从我的字母中取出字符并将自己限制为5个字符。
var uniqueId = function() {
return Math.random().toString(36).substr(2, 16);
};
任何帮助将不胜感激: - )
答案 0 :(得分: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());
&#13;
[number of possible char]^[lenght of the generatet id]
- 这样您就拥有了3.200.000个唯一ID ... 3.200.001&#39; 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());
&#13;
答案 1 :(得分:1)
请参阅下面的函数,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));
}
答案 2 :(得分:1)
其他一些人只是打败了我,但这里有一个相当容易阅读的替代方案。它还包含不允许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);
}