我需要使用JavaScript动态生成唯一的ID号码。过去,我是通过使用时间来创建一个数字来实现这一点的。该数字由四位数年份、两位数月份、两位数日期、两位数小时、两位数分钟、两位数秒和三位数毫秒组成。因此它看起来像这样:20111104103912732... 这足以提供我所需的唯一数字的确定性。
已经有一段时间了,我没有这个代码了。是否有人可以提供这个代码,或者有更好的建议来生成唯一ID?
我需要使用JavaScript动态生成唯一的ID号码。过去,我是通过使用时间来创建一个数字来实现这一点的。该数字由四位数年份、两位数月份、两位数日期、两位数小时、两位数分钟、两位数秒和三位数毫秒组成。因此它看起来像这样:20111104103912732... 这足以提供我所需的唯一数字的确定性。
已经有一段时间了,我没有这个代码了。是否有人可以提供这个代码,或者有更好的建议来生成唯一ID?
更好的方法是:
new Date().valueOf();
而不是
new Date().getUTCMilliseconds();
valueOf() 很可能是一个唯一的数字。http://www.w3schools.com/jsref/jsref_valueof_date.asp
+new Date()
。 - thdoanvalueOf()
时得到了重复的结果。
我只是使用了这个 - +performance.now().toString().replace('.', 7)
https://developer.mozilla.org/en-US/docs/Web/API/Performance/now - Itzik Ben Hutta创建一个数字,并且可以很确信这个数字在你所想象的独立实例中是唯一的,最短的方法是:
Date.now() + Math.random()
如果函数调用之间存在1毫秒的差异,那么绝对会生成一个不同的数字。如果在同一毫秒内创建超过几百万个数字,才应该开始担心重复的数字问题,但这种情况并不常见。new Date().valueOf().toString(36) + Math.random().toString(36).substr(2)
这将给您一个19个字符的字母数字字符串,具有相当不错的熵值。但其中一半是可预测的。 - Erik PukinskisMath.floor(Date.now() * Math.random())
гҖӮеҰӮжһңдҪ еңЁеҫӘзҺҜдёӯеҸӘдҪҝз”ЁDate.now()пјҢдјҡеҮәзҺ°йҮҚеӨҚпјҢдҪҶжҳҜдҪҝз”ЁMath.random()еҸҜд»Ҙи®©е®ғдҝқжҢҒе”ҜдёҖжҖ§гҖӮ - Eugene P.如果你只需要一个相对唯一的数字,那么
var timestamp = new Date().getUTCMilliseconds();
如果你只需要一个简单的数字,那么可以直接获得。但是如果你需要可读版本,就需要进行一些处理:
var now = new Date();
timestamp = now.getFullYear().toString(); // 2011
timestamp += (now.getMonth < 9 ? '0' : '') + now.getMonth().toString(); // JS months are 0-based, so +1 and pad with 0's
timestamp += ((now.getDate < 10) ? '0' : '') + now.getDate().toString(); // pad with a 0
... etc... with .getHours(), getMinutes(), getSeconds(), getMilliseconds()
new Date().getTime();
。date.getUTCMilliseconds()
返回一个介于 0 和 999 之间的数字。date.getTime()
返回自 1970 年 1 月 1 日以来的毫秒数(常规时间戳)。http://www.w3schools.com/jsref/jsref_obj_date.asp - Automatico(Math.random().toString().replace('.',Math.random().toString().replace('.','')))
这将在快速循环内提供唯一的数字。 - Md. A. Apu使用以下代码可以简单地实现:
var date = new Date();
var components = [
date.getYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
];
var id = components.join("");
var id = Date.now().toString()
更好。 - kien_coi_1997当我想要比一堆数字更小的东西时,我会改变进制。
var uid = (new Date().getTime()).toString(36)
(Date.now() + Math.random()).toString(36)
,以防止毫秒冲突。它很短,生成类似于“k92g5pux.i36”的东西。 - Edward使用这种方法比创建一个Date
实例更快,代码更少,并且始终会产生一个唯一的数字(本地):
function uniqueNumber() {
var date = Date.now();
// If created at same millisecond as previous
if (date <= uniqueNumber.previous) {
date = ++uniqueNumber.previous;
} else {
uniqueNumber.previous = date;
}
return date;
}
uniqueNumber.previous = 0;
jsfiddle:http://jsfiddle.net/j8aLocan/
我已将此发布至Bower和npm:https://github.com/stevenvachon/unique-number
我使用
Math.floor(new Date().valueOf() * Math.random())
所以,如果代码在同一时间被触发,那么有一点可能性随机数会相同。
new Date()
很有用。你可以通过两个不同的日期得到相同的数字。 - JMaylinMath.random()
函数好在哪里? - JMaylin2023年,您可以使用浏览器内置的Crypto API生成具有加密强度的随机值。
function getRandomNumbers() {
const typedArray = new Uint8Array(10);
const randomValues = window.crypto.getRandomValues(typedArray);
return randomValues.join('');
}
console.log(getRandomNumbers());
// 1857488137147725264738
function getRandomNumbers() {
const typedArray = new Uint8Array(10);
const randomValues = window.crypto.getRandomValues(typedArray);
return randomValues.join('');
}
console.log(getRandomNumbers());
无论在哪个主流浏览器中,包括IE11,都支持Uint8Array构造函数和Crypto.getRandomValues函数。
这样就可以了:
var uniqueNumber = new Date().getTime(); // milliseconds since 1st Jan. 1970
如果你想在几毫秒后得到一个唯一的数字,那么可以使用Date.now()
,如果你想在一个for循环
中使用它,那么可以将Date.now()
和Math.random()
结合使用。
在for循环中获取唯一数字
function getUniqueID(){
for(var i = 0; i< 5; i++)
console.log(Date.now() + ( (Math.random()*100000).toFixed()))
}
getUniqueID()
输出:所有数字都是唯一的
15598251485988384
155982514859810330
155982514859860737
155982514859882244
155982514859883316
不使用Math.random()
生成唯一数字
function getUniqueID(){
for(var i = 0; i< 5; i++)
console.log(Date.now())
}
getUniqueID()
输出:: 数字重复出现
1559825328327
1559825328327
1559825328327
1559825328328
1559825328328
new Date().toISOString()
吗? - Anna B