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
hsb.horse