• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

Generierung einer ID - wie am sinnvollsten?

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Hallo zusammen,

Folgender Sachverhalt liegt vor:
In meiner App haben die Benutzer die Möglichkeit Berichte zu senden, die dann auf einem Server mit einer eindeutigen
ID gespeichert werden sollen. Stellt sich nun die Frage wie ich solch eine eindeutige ID erzeuge. Klar ich könnte einen Zufallsgenerator anschmeißen, aber irgendwann würde sich die Zufallzahl ja wiederholen und die Eindeutigkeit wäre dahin.
Den UniqueIdentifier zu benutzen ist auch sehr schlecht, da der Benutzer ja nie mehr als einen Bericht senden könnte. Eine Kombination aus beiden wäre schon sicherer reicht aber trotzdem nicht aus. Nach langem hin und her kam mir die Idee, den UniqueIdentifier zusammen mit dem aktuellen Datum zu verschmelzen.... und nun war sie da, eine ID die sich niemals ein zweites Mal wiederholen kann. Allerdings ist diese Nummer sehr sehr lang und ich bin echt am Ende mit meinen Ideen wie man sonst etwas eindeutiges erzeugen könnte, was sich garantiert niemals wiederholt.
Hat jemand von euch vielleicht eine Idee wie ich eine eindeutige ID mit akzeptabler Länge erzeigen kann, die sich nicht wiederholen kann.
Bin für jeden Vorschlag dankbar.
 
Den UniqueIdentifier zu benutzen ist auch sehr schlecht, da der Benutzer ja nie mehr als einen Bericht senden könnte.
Wenn der Bericht eine UUID bekommt, ist doch die Sache kein Problem.


"Garantiert niemals wiederholt" gibt es bei der Frage übrigens nicht. Aber die gängigen Methoden erzeugen Identifier, die sich höchstwahrscheinlich nicht wiederholen.
 
Du kannst doch auch nur die ersten 7? / 11? / 14? Zeichen des UniqueIdentifier benutzen und diese dann wie schon gehabt mit dem akt. Datum anhängen.
 
Viele Dank für eure Ideen und Vorschläge. So wie Miralem23 es beschrieben hat, habe ich es jetzt im Endeffekt auch eingebaut. Die Sache mit der UUID schau ich mir mal an, von einer klasse mit der man solche UUIDs erzeugen kann wusste ich nämlich noch gar nichts.
 
Mach es dir doch noch einfacher. Jetzt macht die App die UUIDs. Der Server kann das aber auch! Baue dort einen Counter ein und dein Problem ist gelöst. Willst du schöne IDs, dann nimm zum Beispiel eine 4-6stellige Zahl und iteriere darüber. Für die Ausgabe encodierst du dann diese Zahl zeichenweise mit base64. Einen eigenen coder/decoder für base64 kann ich dir liefern. Dann sieht das noch schön professionell aus!

Beispiel (mit meinen Funktionen):

Code:
int zahl = [currentObject uID];
char normal[7], encoded[9] // 6 chars / 8 chars + Nulltermination
sprintf("%06d", zahl);
b64_encodeString(normal, encoded);
NSString *uidString = [NSString stringWithCString:encoded encoding:NSUTF8StringEncoding];

Die Zahl 100005 ergibt somit MTAwMDA1
100006 ergibt dann MTAwMDA2
103021 ergibt MTAzMDIx
142693 = MTQyNjkz

nur so ein paar Beispiele

Gruss ppocket
 
Zuletzt bearbeitet:
Noch einfacher: [[NSProcessInfo processInfo]globallyUniqueString] liefert Dir einen sehr langen global einzigartigen String.