Eindeutige ID (ala UUID) generieren als numerisch, maximal 16 Stellen

LimDul

Top Contributor
Wir erzeugen bei uns um Code für manche Objekte eine technische ID um sie auch bei Historisierung und Co eindeutig zu identifizieren. Standardmäßig ist das eine UUID in String-Form. Damit haben wir Kollisonsfreiheit ausreichend sichergestellt.

Nur kommt nicht jedes externe System mit dem wir reden mit solchen langen Strings klar.

Hab ich eine Möglichkeit eine numerische, maximal 16 Stellen lange, positive Zahl zu erzeugen die wie eine UUID (im Rahmen der Möglichkeiten) kollisonsfrei ist?

Bzw. kann ich das sogar auf einen positiven int einschränken (1 bis 2147483647)?
 

Oneixee5

Top Contributor
Das ergibt zwar kein int ...
Java:
            final String shortUUID = Long.toString(
                    ByteBuffer.wrap(UUID.randomUUID().toString().getBytes()).getLong(), Character.MAX_RADIX);
 

Robert Zenz

Top Contributor
Was mir spontan einfallen wuerde, waere Zeitstempel in Milli- oder Nanosekunden mit angehaengten (oder eingemischten?) Zufall. Dann ist natuerlich der Zeitstempel der Erstellung drinnen, weisz ich nicht ob das Datenschutzrelevant fuer euch ist oder nicht.

Tatsaechlich habe ich gerade ein aehnliches Problem, und waere gespannt ob jemand dazu eine richtig gute Loesung hat.
 

httpdigest

Top Contributor
Eine UUID (z.B. die Version 4 in Java) ist auch einfach nur eine 128 Bit Zahl. Dass ihre standardmäßige Kodierung als String (mit base64-encoding) repräsentiert wird, ist ja eine andere Sache.
Du kannst aus dieser 128-Bit Zahl ja einfach nur die ersten/letzten 32-bit nehmen:
Java:
import java.util.UUID;
public class UuidExample {
  public static void main(String[] args) {
    UUID uuid = UUID.randomUUID();
    int leastSignificant32Bits = (int) uuid.getLeastSignificantBits();
  }
}
In wieweit das jetzt noch hinreidend kollisionsfrei ist, ist mal dahingestellt.
 

temi

Top Contributor
Eine UUID (z.B. die Version 4 in Java) ist auch einfach nur eine 128 Bit Zahl. Dass ihre standardmäßige Kodierung als String (mit base64-encoding) repräsentiert wird, ist ja eine andere Sache.
Handelt es sich nicht um eine hexadezimale Codierung? Nutzt man für die Codierung alle Zeichen des Alphabets, dann müsste es doch möglich sein, die 128 Bit auch mit weniger Zeichen zu kodieren. Oder irre ich mich?
 

LimDul

Top Contributor
Gefallen tut mir keine eurer Lösung. Ich befürchte es ist auch schwer möglich einen int lokal zu generieren und möglichst Kollisionsfrei zu bekommen.

Ich befürchte ich muss doch in den sauren Apfel beißen und irgendwo auf passender Ebene eine letzte vergebene ID führen und die entsprechend hochzählen.
 

LimDul

Top Contributor
Lösung nach Diskussion bei uns intern.

Anzahl Sekunden nach einem bestimmten Zeitpunkt modulo Integer.MAX_INT (Integer reicht für 68 Jahre).
 

Jw456

Top Contributor
Frage wieviel IDs werdet ihr brauchen?
Denn mit deiner Methode wird es wohl so sein das da einige Lücken entstehen. Wenn jetzt einige Zeit keine id gebraucht vergeben wird. Entsteht ja eine Lücke.
Reicht es dann noch?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E eindeutige Id's für Rechner Allgemeine Java-Themen 7
U Nicht eindeutige Dateipfade Allgemeine Java-Themen 7
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12
H Eindeutige ID erzeugen? Allgemeine Java-Themen 15
turmaline UUID Allgemeine Java-Themen 4
reibi GUID bzw. UUID Allgemeine Java-Themen 7
M UUID als Key einer Map Allgemeine Java-Themen 2
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
J Sudoku generieren Schwierigkeitsgrad Allgemeine Java-Themen 3
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
D Mail aus GUI generieren Allgemeine Java-Themen 2
J Primzahlen generieren Allgemeine Java-Themen 6
M Serien- / Werksnummern generieren Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
N Zahl mit bestimmter Länge und nur bestimmten Zahlen generieren lassen Allgemeine Java-Themen 7
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
T Geschwindigkeit beim Generieren erhöhen? Allgemeine Java-Themen 7
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
L Generieren Zufallsdaten aus CSV dateien Allgemeine Java-Themen 11
N String generieren Allgemeine Java-Themen 3
J Hash aus Verzeichniss generieren Allgemeine Java-Themen 2
Eldorado Barcodes mit statischer Breite generieren Allgemeine Java-Themen 3
M aus 3 BufferedImages 1 generieren Allgemeine Java-Themen 5
E Zufallszahl generieren Allgemeine Java-Themen 5
M Shapes mit abgerundeten Ecken generieren Allgemeine Java-Themen 2
T Zufallszahlen generieren und dabei eine Zahl weglassen Allgemeine Java-Themen 4
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
V Einfache toString() generieren? Allgemeine Java-Themen 6
O .jar Files - Tools zum generieren Allgemeine Java-Themen 25
B PDF generieren. Problem mit PipedStreams. Allgemeine Java-Themen 4
G UML aus Commandline generieren Allgemeine Java-Themen 9
M nicht gleichverteilte Zufallszahlen generieren Allgemeine Java-Themen 6
B Mit Java Powerpoint Reporte und PDF generieren Allgemeine Java-Themen 9
lumo "Exzessiv" dynamisches generieren Allgemeine Java-Themen 6
B Schlüssel von Java automatisch generieren lassen. Allgemeine Java-Themen 4
T Einfachen Ton in Java generieren Allgemeine Java-Themen 4
B String generieren Allgemeine Java-Themen 4
S Datei aller möglich encodings generieren Allgemeine Java-Themen 2
G Char-zufällig-generieren Allgemeine Java-Themen 11
H RTF zu Word-Dokument generieren Allgemeine Java-Themen 5
B Namen eines Objekts generieren? Allgemeine Java-Themen 4
C Laufende Nummer generieren Allgemeine Java-Themen 4
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
N Transaktionsnummer (Tan) generieren? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben