如何使用meteor或javascript

时间:2017-02-03 11:14:39

标签: javascript meteor

我需要生成10个字符(包括字母和数字)唯一代码,以申请系统生成的礼券。目前,我正在使用以下代码。但它包含13个数字。

var today = new Date();
Number(today);

是否有任何其他方法可以创建10位数的唯一值来应用系统生成的礼券。它应该永远不会在任何时候相同。代码应该像流星集合中的_id一样生成。什么是最好的方法来做到这一点?

在meteor中它为记录生成一个唯一的id。就像我需要创建一个10位数的唯一值

3 个答案:

答案 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;
}