jQuery生成短唯一编号

时间:2015-05-11 10:45:44

标签: javascript jquery

我正在尝试生成一个唯一的随机字符串。

var string = Math.floor( Math.random() * 1000 ) + Date.now();

我现在使用的上述方法给了我太长的字符串,我想要一个更短的独特字符。

3 个答案:

答案 0 :(得分:2)

以下是避免重复ID问题的解决方法:

var GenRandom =  {

    Stored: [],

    Job: function(){
        var newId = Date.now().toString().substr(6); // or use any method that you want to achieve this string

        if( this.Check(newId) ){
            this.Job();
        }

        this.Stored.push(newId);
        return newId; // or store it in sql database or whatever you want

    },

    Check: function(id){
        for( var i = 0; i < this.Stored.length; i++ ){
            if( this.Stored[i] == id ) return true;
        }
        return false;
    }

};

<强> jsFiddle

答案 1 :(得分:0)

根据Tushar的建议,(new Date().getTime()+'').substr(6,7)将为您提供7位数的唯一编号。不是随机的,而是独特的...至少在一定时间内。由于它基于时间戳,因此实际上是毫秒时间。由于长度为7位,因此每1000秒将从0000000循环至9999999,大约为17分钟。但是你不能期望更高的独特性水平&#34;只有7位数。它可能足以满足您的应用需求,具体取决于您希望实现的目标。

修改

跟进你的评论:你想要一个唯一的SECOND号码,所以毫秒对你没用(应该提到你问题中的秒数)。

您可以为发票指定当前秒数,即(new Date().getTime()+'').substr(3,7)。如果唯一编号不限于7位数,那将是完美的。这使得9.999.999可能的秒数,即......大约115天。 使用9位数字,您可以在316年内每秒打印唯一的发票号码。

因此,在我看来,您唯一的解决方案就是从0000001开始计算发票,然后是0000002等,并在某处保持跟踪,以确保唯一性。我不知道如何在0到9.999.999之间生成随机号码,这样可以使发票编号更有效或更容易跟踪。

答案 2 :(得分:0)

对于发票号,无论多长时间,您都应该保证唯一标识符。在这种情况下,我建议使用UUID / GUID。有关两种实现(windows-COM / non-windows),请参阅http://guid.us/GUID/PHP。如果您不熟悉UUID的概念,请在此处查看维基百科:http://en.wikipedia.org/wiki/Universally_unique_identifier

另一个选择是使用mysql的本机uuid生成器:​​

select uuid();

您也可以在插入查询中使用,例如:

insert into mytable (id, data) values (uuid(), 'mytext');

当然,您的表格结构需要调整。我个人认为最好使用传统的整数auto_inc id作为主键,以及在复制/导出/等中使用的guid字段作为键。

修改 显然在mysql中也有一个uuid_short()函数(自5.1.20起)。

SELECT UUID_SHORT();
92395783831158784

请参阅https://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_uuid-short