JavaScript Random id zuordnen?

DreamGamer

Lieutenant
Registriert
Feb. 2017
Beiträge
543
Hallo, ich bin aktuell eine Webseite am Programmieren, wo Leute Sachen Hochladen können und jedes Item soll eine ID bekommen, aber keine Zahlen ID, weil diese wäre irgendwann extrem lang ^^ Weshalb es eine 6 stellige Zahlen und Buchstaben Kombination sein soll. Weiß einer wie ich dies machen könnte vom Prinzip her? Wenn ich über eine Random id bekommen möchte, kann ich ja einfach das hier machen
Javascript:
Math.random().toString(36).substr(2, 6);
Nur ist das Problem, wenn ich dies so mache ist ja irgendwann eine ID mal doppelt und zu checken, ob es diese schon gibt wäre irgendwann zu leistungs fressend. Weiß einer wie man soetwas gut lösen könnte?

MFG DreamGamer
 
Erstell Dir eine Tabelle, die alle möglichen Ids enthält. Beim Hochladen nimmst Du die erste verfügbare Id und markierst sie als vergeben oder löschst sie.
 
Nimm einfach fortlaufende Zahlen… und, falls du die ID irgendwo als String verwenden willst (URL), kodier sie base64
Es warden sicher nicht so viele Sachen hochgeladen, dass das zum Problem wird.

Und du wirst ja wohl nicht die Sachen nachher löschen, also macht es eh nicht viel Unterschied.

Ergänzung ()

soares schrieb:
Beim Hochladen nimmst Du die erste verfügbare Id und markierst sie als vergeben oder löschst sie.
Da muss er jedes mal durch die ganze Tabelle durch.
 
Zuletzt bearbeitet:
Das mit der ID habe ich mir auch schon überlegt das ich einfach über die Datenbank eine ID jedem Video zuweise und diese dann diese ID / 10000 nehme und diese dann zu base 64 umcodiere nur besteht dort nicht auch die chances das eine ID doppelt sein kann? Nicht oder? Also wenn ich es so machen würde?

Code:
number = DBID / 10000;
var id = number.toString(36).substr(2, 6);
 
Eine UUID kann auch doppelt vorkommen (obwohl anfangs unwahrscheinlich), muss also auch geprüft warden.
 
DreamGamer schrieb:
Das mit der ID habe ich mir auch schon überlegt das ich einfach über die Datenbank eine ID jedem Video zuweise und diese dann diese ID / 10000 nehme und diese dann zu base 64 umcodiere nur besteht dort nicht auch die chances das eine ID doppelt sein kann? Nicht oder? Also wenn ich es so machen würde?

Code:
number = DBID / 10000;
var id = number.toString(36).substr(2, 6);
Wieso durch 1000?

https://gist.github.com/alkaruno/b84162bae5115f4ca99b

Hier ist ein Beispiel für Eine Kodierung zu b64.

Wenn du Eine fortlaufende Nummer hast und diese zu basd64 umwandelst für strings, hast du garantiert nichts doppelt.
 
new Account() schrieb:
Eine UUID kann auch doppelt vorkommen (obwohl anfangs unwahrscheinlich), muss also auch geprüft warden.

2**122 ist die Wahrscheinlichkeit etwas doppelt zu treffen, man trifft quasi nie doppelt.
 
@new Account() Das klingt zwar gut nur wollte ich ja eine ID die immer 6 stellig ist deshalb ja auch / 10000 damit diese dort auch 6stellig oder 4 stellig sein kann ^^ Aber so wie ich es oben geschrieben habe kommt die ID manchmal doppelt vor. Eine Möglichkeit gibt es nicht es zu einer 6stelligen Buchstaben und Zahlen Kombination zu machen oder? Oder gibt es die Möglichkeit so ein Muster zu bekommen? AAAA, AAAB, AAAC, AAAD usw.?
Ergänzung ()

@entropie88 Wir lang sind den UUID's? Kann man die länge bestimmen bzw. wie funktioieren denn UUID's?
 
Wieso muss diese immer 6-stellig sein? Generell keine gute Idee...

UUIDs sind immer 36 Zeichen lang, kodiert 16 Byte groß.


Rat: Nimm entweder UUIDs und, falls du paranoid bist, prüf auf Vorhandensein, oder nimm einfach Eine fortlaufende Nummer.

Ansonsten schreib dir einen Algorithmus, der das Muster "AAAA, AAAB, AAAC, AAAD, …" generiert, ich wüsste nichts dergleichen.
 
Hmm UUID's klingen eig. recht gut ich denke aber mal die Bindestriche in der UUID haben einen sinn oder? bzw. sagen wir es so die ID kann ruhig länger, als 6stellig sein nur sollte diese immer die gleiche länge haben das ist der Haupt Faktor worum es mir geht ^^ Es gibt keine UUID's ohne Sonderzeichen oder?
 
Nein gibt es nicht, aber sie sind immer gleich lange.

Wieso ist gleichbleibende Länge so wichtig?
 
Wichtig ist das falsche Wort ich persönlich mag dies einfach nicht wenn eine ID immer unterschiedlich lang ist ^^ Es weiß hier keiner wie z.b. YT oder GitHub die ID's auswählt oder? Youtube hat eine 12 Stellige Zeichen und Buchstaben ID und GitHub hat eine 20 Stellige Zahlen und Buchstaben ID
 
Wieso dann nicht einfach einen Hash (Client-seitig)? Dann weißt du auch, wenn jemand eine Datei hochlädt, die es schon gibt (und kannst sie – wie z.B. Dropbox oder einige Filehoster es machen – dem Nutzer zuweisen ohne Bandbreite und Speicherplatz zu verschwenden).
 
Amaoto schrieb:
Wieso dann nicht einfach einen Hash (Client-seitig)? Dann weißt du auch, wenn jemand eine Datei hochlädt, die es schon gibt (und kannst sie – wie z.B. Dropbox oder einige Filehoster es machen – dem Nutzer zuweisen ohne Bandbreite und Speicherplatz zu verschwenden).
Was, wenn der 6-stellige Hash doppelt vorkommt? :D
 
Normalerweise lässt man solche Daten von einer Datenbank verwalten und die gibt sowieso einen inkrementierenden Index bzw. Rownumber. Nimm einfach diese. Wenn dir Zahlen nicht gefallen mach halt einen hexadezimalen Wert daraus.

Wenn dich unterschiedliche Längen stören, dann füll die Werte mit führenden Nullen auf (bei der Anzeige, nicht in der Datenbank!). Das hat auch den vorteil, dass du jederzeit Stellen hinzufügen kannst wenn ein 8stelliger Hex-Wert nicht mehr reichen sollte.

Vorteile:
* Jeder der mal ein paar Wochen programmiert hat versteht was du gemacht hast und kann in der Regel ohne Kommentare zu lesen nachvollziehen wieso
* Du verplemperst keine Rechenzeit um irgendwelches Hashes zu berechnen oder Pseudozufallszahlen zu erzeugen.
 
new Account() schrieb:
Was, wenn der 6-stellige Hash doppelt vorkommt? :D
Hexadezimal (0-9a-f) läge die Wahrscheinlichkeit bei ca. 1:17 Mio., alphanumerisch (a-zA-Z0-9) entsprechend bei ca. 1:57 Mrd. :)
 
Zurück
Oben