logo hsb.horse
← Zur Snippets-Übersicht

Snippets

Polyfill für crypto.randomUUID

Polyfill-Implementierung der crypto.randomUUID-Funktion. Da alle Browser dies unterstützen, ist eine neue Implementierung nicht erforderlich, aber es dient als Referenz zum Verständnis des UUID v4-Mechanismus.

Veröffentlicht: Aktualisiert:

Da alle Browser crypto.randomUUID unterstützen, besteht keine Notwendigkeit mehr, diesen Polyfill zu implementieren. Allerdings ist es ein gutes Thema, um den Mechanismus von UUID v4 zu verstehen.

Code

type UUID = `${string}-${string}-${string}-${string}-${string}`;
const FN_NAME = "randomUUID";
const BASE_STR = [1e7, 1e3, 4e3, 8e3, 1e11].join("-");
/**
* UUID v4 generieren
* Führt Polyfill-Implementierung aus, wenn der Browser randomUUID nicht unterstützt
*/
export function randomUUID(): UUID {
const api = crypto;
if (FN_NAME in api) return api[FN_NAME]();
return BASE_STR.replace(/[018]/g, replacer) as UUID;
}
function replacer(char: string): string {
const random = crypto.getRandomValues(new Uint8Array(1))[0];
const int = Number.parseInt(char);
return (int ^ (random & (15 >> (int / 4)))).toString(16);
}

Funktionsweise von UUID v4

UUID v4 ist ein zufällig generierter 128-Bit-Identifier. Das Standardformat ist 8-4-4-4-12 mit insgesamt 36 Zeichen (einschließlich Bindestrichen).

  • xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
  • Das 13. Zeichen ist immer 4 (zeigt Version an)
  • Das 17. Zeichen ist 8, 9, a oder b (zeigt Variante an)

Implementierungserklärung

BASE_STR wird zur Vorlage “10000000-1000-4000-8000-100000000000”. Durch Ersetzen der Zeichen 0, 1 und 8 mit Zufallswerten via replace() wird die UUID generiert.

crypto.getRandomValues liefert kryptographisch sichere Zufallszahlen, und Bit-Operationen fügen diese an jeder Position der UUID ein.

Hinweise

  • Verwenden Sie native crypto.randomUUID im Produktivcode
  • Diese Implementierung ist für Bildungszwecke gedacht
  • Die Leistung ist schlechter als die native Implementierung