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
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.
1 Stimmen
Wenn jemand mehr Optionen wie verschiedene Versionen der uuid und Unterstützung für nicht standardmäßige guids wünscht, können REST-basierte uuid-Generierungsdienste wie diese [ fungenerators.com/api/uuid ] sind ebenfalls eine attraktive Option.
2 Stimmen
Etwa 12 Jahre später mit
BigInt
und ES6-Klassen können auch andere Techniken eingesetzt werden, die Raten von 500.000 uuid/sec ermöglichen. Siehe Referenz5 Stimmen
Comme andere haben erwähnt Wenn Sie nur eine kleine Anzahl von UUIDs in einem Browser erzeugen, verwenden Sie einfach
URL.createObjectURL(new Blob()).substr(-36)
. ( Ausgezeichnete Browser-Unterstützung ). (Um Speicherlecks zu vermeiden, URL.revokeObjectURL(url) aufrufen )1 Stimmen
Wenn Sie ein unternehmenskritisches Problem haben, schreiben Sie besser einen Endpunkt, der mit Pyhton geschrieben wurde, und rufen ihn auf. Weil es so implementiert ist, wie unter datatracker.ietf.org/doc/html/rfc4122.html