[javascript] 자바 스크립트 시간으로 고유 번호 만들기

자바 스크립트를 사용하여 즉시 고유 한 ID 번호를 생성해야합니다. 과거에는 시간을 사용하여 숫자를 생성하여이 작업을 수행했습니다. 숫자는 4 자리 연도, 2 자리 월, 2 자리 일, 2 자리시, 2 자리 분, 2 자리 초 및 3 자리 밀리 초로 구성됩니다. 따라서 다음과 같이 보일 것입니다. 20111104103912732 … 이것은 내 목적에 맞는 고유 번호에 대한 충분한 확실성을 제공합니다.

이 일을 한 지 오래되었고 더 이상 코드가 없습니다. 누구든지이 작업을 수행 할 수있는 코드가 있거나 고유 ID 생성에 대한 더 나은 제안이 있습니까?



답변

고유 한 번호를 원하면

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().valueOf();

대신에

new Date().getUTCMilliseconds();

valueOf () 는 “가장 가능성이 높은”고유 번호입니다. http://www.w3schools.com/jsref/jsref_valueof_date.asp .


답변

생각할 수있는 한 많은 개별 인스턴스 중에서 고유 할 수있는 번호를 만드는 가장 짧은 방법은 다음과 같습니다.

Date.now() + Math.random()

함수 호출에 1 밀리 초 차이가있는 경우 다른 숫자를 생성하는 것이 100 % 보장됩니다. . 동일한 밀리 초 내의 함수 호출의 경우이 동일한 밀리 초 내에 수백만 개 이상의 숫자를 생성하는 경우에만 걱정하기 시작해야합니다. 이는 그다지 가능성이 없습니다.

동일한 밀리 초 내에 반복되는 숫자를 얻을 확률에 대한 자세한 내용은 https://stackoverflow.com/a/28220928/4617597을 참조 하십시오.


답변

다음 코드를 사용하여 간단히 수행 할 수 있습니다.

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 uid = (new Date().getTime()).toString(36)


답변

이것은 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

cuid , puid 또는 shortid 와 같은 좀 더 정교한 것을 사용 하여 숫자가 아닌 것을 생성 할 수도 있습니다 .


답변

나는 사용한다

Math.floor(new Date().valueOf() * Math.random())

따라서 혹시라도 코드가 동시에 실행되면 난수가 동일 할 가능성이 아주 작습니다.