5387 Stimmen

Wie man eine GUID / UUID erstellt

Ich versuche, in JavaScript global eindeutige Bezeichner zu erstellen. Ich bin mir nicht sicher, welche Routinen in allen Browsern verfügbar sind, wie "zufällig" und gesetzt der eingebaute Zufallszahlengenerator ist, usw.

Die GUID / UUID sollte mindestens 32 Zeichen lang sein und im ASCII-Bereich bleiben, um Probleme bei der Weitergabe zu vermeiden.

38 Stimmen

GUIDs, die als Zeichenketten dargestellt werden, sind mindestens 36 und höchstens 38 Zeichen lang und entsprechen dem Muster ^\{?[a-zA-Z0-9]{36}?\}$ und sind daher immer in ASCII.

5 Stimmen

David Bau bietet einen viel besseren Zufallszahlengenerator an, der unter davidbau.com/archives/2010/01/30/ Ich habe einen etwas anderen Ansatz zur Erzeugung von UUIDs unter blogs.cozi.com/tech/2010/04/generating-uuids-in-javascript.html

1 Stimmen

Seltsam, dass das noch niemand erwähnt hat, aber der Vollständigkeit halber: Es gibt eine Fülle von guid-Generatoren auf npm Ich wette, die meisten von ihnen funktionieren auch im Browser.

5voto

Giridhar Punkte 95

Ich verwende die folgende Funktion:

function NewGuid()
{
    var sGuid = "";
    for (var i=0; i<32; i++)
    {
        sGuid += Math.floor(Math.random()*0xF).toString(0xF);
    }
    return sGuid;
}

4voto

Dustin Poissant Punkte 2885

Ich fand dieses Skript nützlich, um GUIDs in JavaScript zu erstellen

https://github.com/addui/GUIDJS

var myGuid = GUID();

0 Stimmen

Diese verwendet Math.random unter der Motorhaube . Daher gebrochen und wahrscheinlich zu leiden Kollisionen in Browsern mit schlechten Math.random Implementierungen. Bevorzugen Sie uuid da es die crypto API, sofern verfügbar.

4voto

MaxPRafferty Punkte 4591

Nur für den Fall, dass jemand, der bei Google vorbeischaut, eine kleine Hilfsbibliothek sucht, ShortId alle Anforderungen dieser Frage erfüllt. Es erlaubt die Angabe von zulässigen Zeichen und Längen und garantiert nicht-sequentielle, sich nicht wiederholende Zeichenketten.

Um diese Frage besser beantworten zu können, verwendet der Kern dieser Bibliothek die folgende Logik, um seine Kurznamen zu erzeugen:

function encode(lookup, number) {
    var loopCounter = 0;
    var done;

    var str = '';

    while (!done) {
        str = str + lookup( ( (number >> (4 * loopCounter)) & 0x0f ) | randomByte() );
        done = number < (Math.pow(16, loopCounter + 1 ) );
        loopCounter++;
    }
    return str;
}

/* Generates the short id */
function generate() {

    var str = '';

    var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);

    if (seconds === previousSeconds) {
        counter++;
    } else {
        counter = 0;
        previousSeconds = seconds;
    }

    str = str + encode(alphabet.lookup, version);
    str = str + encode(alphabet.lookup, clusterWorkerId);
    if (counter > 0) {
        str = str + encode(alphabet.lookup, counter);
    }
    str = str + encode(alphabet.lookup, seconds);

    return str;
}

Ich habe dies nicht bearbeitet, um die nur die grundlegendsten Teile dieses Ansatzes, so dass der obige Code einige zusätzliche Logik aus der Bibliothek enthält. Wenn Sie neugierig auf alles sind, was es tut, werfen Sie einen Blick auf den Quellcode: https://github.com/dylang/shortid/tree/master/lib

3voto

vanowm Punkte 6590

Die folgende Funktion erzeugt eine statische UUID aus einer Zeichenkette oder eine zufällige UUID, wenn keine Zeichenkette angegeben wird:

function stringToUUID (str)
{
  if (str === undefined || !str.length)
    str = "" + Math.random() * new Date().getTime() + Math.random();

  let c = 0,
      r = "";

  for (let i = 0; i < str.length; i++)
    c = (c + (str.charCodeAt(i) * (i + 1) - 1)) & 0xfffffffffffff;

  str = str.substr(str.length / 2) + c.toString(16) + str.substr(0, str.length / 2);
  for(let i = 0, p = c + str.length; i < 32; i++)
  {
    if (i == 8 || i == 12 || i == 16 || i == 20)
      r += "-";

    c = p = (str[(i ** i + p + 1) % str.length]).charCodeAt(0) + p + i;
    if (i == 12)
      c = (c % 5) + 1; //1-5
    else if (i == 16)
      c = (c % 4) + 8; //8-B
    else
      c %= 16; //0-F

    r += c.toString(16);
  }
  return r;
}

console.log("Random       :", stringToUUID());
console.log("Static [1234]:", stringToUUID("1234")); //29c2c73b-52de-4344-9cf6-e6da61cb8656
console.log("Static [test]:", stringToUUID("test")); //e39092c6-1dbb-3ce0-ad3a-2a41db98778c

jsfiddle

3voto

Rambler Punkte 165

Leicht zu bewerkstelligen mit einem einfachen uuid-Paket https://www.npmjs.com/package/uuid

const { v4: uuidv4 } = require('uuid');
uuidv4(); //  '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X