EN · DE · RU · FR · ES

#2759: revisedRandomId.js

projectforge-webapp/src/utilities/revisedRandomId.js Hilfsfunktion (einzelner Export) · projectforge-webapp/src/utilities/revisedRandomId.js 4 Zeilen · 4 Code · 0 Kommentare · 0 Leerzeilen
Eine kompakte Einzeiler-Funktion, die kurze, zufällige alphanumerische Identifikatoren erzeugt. Sie nutzt JavaScripts Math.random() in Verbindung mit dem Basis-36-Zahlensystem. Die Ausgabe ist eine 10-stellige Zeichenkette aus Ziffern und Kleinbuchstaben (0-9, a-f plus g-z), bereinigt von allen nicht-alphanumerischen Artefakten. Wird im Frontend verwendet, um flüchtige, kollisionsresistente IDs für UI-Elemente wie Toast-Benachrichtigungen, dynamisch eingefügte DOM-Knoten und temporäre Listenschlüssel zu erzeugen, die keine kryptografische Zufälligkeit erfordern.

Architektur

Algorithmus

Die Funktion verknüpft drei Operationen: Math.random().toString(36) wandelt eine zufällige Gleitkommazahl in eine Basis-36-Darstellung um (erzeugt eine Zeichenkette wie 0.4kzy9x2n7fl), .replace(/[^a-z0-9]+/g, '') entfernt die führende 0. sowie alle anderen nicht-alphanumerischen Artefakte, und .substr(1, 10) extrahiert Zeichen ab Index 1 für ein 10-stelliges Ergebnis. Der Start-Offset von 1 überspringt die führende Null, die nach dem Entfernen des Dezimalpunkts übrig bleibt.

Warum nicht crypto.getRandomValues?

Diese Funktion ist bewusst nicht kryptografisch sicher. Sie wird für UI-Identifikatoren (Toast-Schlüssel, React-Listenschlüssel) verwendet, bei denen Kollisionen lediglich einen React-Abgleichsfehler verursachen würden, aber kein Sicherheitsrisiko darstellen. Der Kompromiss ist Geschwindigkeit und Einfachheit – kein Crypto-API-Overhead und keine Abhängigkeit von der Verfügbarkeit von window.crypto.

Git-Verlauf

CommitWas geändert wurde
993957ec7Zwei Verfeinerungen der Zufalls-ID-Generierung: (1) Die Regex-Zeichenklasse wurde von [^a-z]+ auf [^a-z0-9]+ erweitert, sodass Ziffern durch den Filter erhalten bleiben – dies erhöht den ID-Raum von 26^n auf 36^n; (2) Der Startindex von substr wurde von 2 auf 1 geändert, wodurch ein zusätzliches Zeichen Entropie gewonnen wird, anstatt es zu verwerfen. Beide Änderungen waren Teil der Implementierung des Toast-Aktionssystems, wo robustere IDs benötigt wurden.
6cf072707Datei mit der ersten Implementierung des Zufalls-ID-Generators erstellt. Verwendet wurden substr(2, 10) und der Regex [^a-z]+ – ein konservativerer Ansatz, der nur alphabetische Kleinbuchstaben-IDs mit genau 10 Zeichen erzeugte.