我需要生成10个字符(包括字母和数字)唯一代码,以申请系统生成的礼券。目前,我正在使用以下代码。但它包含13个数字。
var today = new Date();
Number(today);
是否有任何其他方法可以创建10位数的唯一值来应用系统生成的礼券。它应该永远不会在任何时候相同。代码应该像流星集合中的_id一样生成。什么是最好的方法来做到这一点?
在meteor中它为记录生成一个唯一的id。就像我需要创建一个10位数的唯一值
答案 0 :(得分:1)
var cache = {};
function getValue() {
var value = Math.floor(Math.random() * 10000000000); // get a random number between 0 and 10000000000
value = ('000000000' + rand).slice(-10); // make it 10 digits long
return cache[value] == undefined? cache[value] = value: getValue(); // return it if it not been returned before, or return another number otherwise
}
console.log(getValue());
console.log(getValue());
console.log(getValue());
console.log(getValue());
// ...
注意:随着时间的推移,进程可能会非常缓慢,并且可能会超出堆栈,从而成为错误。
var START_ID = 1; // The first ID
function getValue() {
var value = START_ID++;
value = ('000000000' + value).slice(-10);
return value;
}
console.log(getValue());
console.log(getValue());
console.log(getValue());
console.log(getValue());
// ...
注意:如果您希望值不具有前导0
。改变这个:
value = ('000000000' + value).slice(-10);
到:
value = '1' + ('00000000' + value).slice(-9);
答案 1 :(得分:1)
这是针对时间值生成的非常简短,有效且安全的解决方案,这绝对是独一无二的:
var unique = new Date().valueOf();
console.log('WITH 13 digits '+ unique);
console.log('WITH 10 digits ' +String(unique).substring(3, 13));
答案 2 :(得分:0)
您可以为此创建自定义javascript函数。
function Unique()
{
var text = "";
var randstring= "0123456789";
for( var i=0; i < 10; i++ )
text += randstring.charAt(Math.floor(Math.random() * randstring.length));
return text;
}