Einfache Hash-Methode erstellen

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich würde gerne eine Methode schreiben; bei jedem Aufruf dieser Methode soll einen unikaten Hast-Wert als String ausgeben. Ich habe folgendes probiert, leider ist da ein negativer Wert rausgekommen, ich kann leider auch nicht gewährleisten, dass bei jedem Aufruf immer unterschiedlicher Wert rauskommen. Sie dienen quasi wie Schüssel in einer Tabelle.

Code:
package de.ratna;

public class Hauptklasse {

	public static void main(String[] args) {
		String meinString = Hauptklasse.meinHash();
        System.out.println(meinString);
    }

	
	public static String meinHash(){
		String egal = "pseudo";
		int erg = egal.hashCode();
		String string = String.valueOf(erg);
		return string;
	}
}

Hat jemand vielleicht eine Idee? Im Grunde muss es unbedingt ein Hash-Code sein. Ein String-Wert von Zeit(bis zu Millisekunden) würde auch gehen.

Vielen lieben Dank.

Viele Grüße aus Rheinland,

Eure Ratna
 
Hi

ein Hash ist per Definition nicht eindeutig, also scheinbar nicht geeignet für dein Vorhaben.
Vllt. beschreibst du etwas näher, was es werden soll...?
 
Hallo sheel,

vielen Dank für die rasche Antwort erstmal. Mein Vorhaben:
ich würde gerne folgendes csv-File erstellen:

1|Ratna|Lein|23091993|Musterweg|24|Eschweiler|Deutschland
2|Muster|Mann|28021998|Musterweg|289|Rostock|Deutschland

Wie man sieht, die erste "Spalte" ist eine Art Schlüssel für jeden Datensatz. Alle anderen Spalten werden grob geschrieben so implementiert:
Code:
...
String datensatz = nachname + DELIMITER + vorname + DELIMITER + gebdat + DELIMITER + str + DELIMITER + hnr + DELIMITER + ort + DELIMITER + land;

return datensatz;

Am Ende würde ich gerne so etwas erzeugen:
Code:
...
String datensatz = einePublicHashMethode() + DELIMITER + nachname + DELIMITER + vorname + DELIMITER + gebdat + DELIMITER + str + DELIMITER + hnr + DELIMITER + ort + DELIMITER + land;

return datensatz;

Wie man sieht, die Methode einePublicHashMethode() soll relativ einfach sein, unabhängig von irgendwelchen Objekten, eindeutigen String-Wert(am besten positive Zahl) ausgeben. Bei jedem Aufruf dieser Methode soll ein eindeutiger Wert rauskommen, deshalb dachte ich an Zeitstempel.

Hättest Du eine Idee?

Vielen Dank.

Viele Grüße aus Rheinland,

Eure Ratna:)
 
Also eine ID-Generierung für neue Datenätze, die selbst nichts Eindeutiges haben.
Ein Zeitstempel hätte das Problem, dass auch mehrere Datenätze in der gleichen
Sekunde (Millisekunde, etc.) erzeugt werden können.

Falls die Daten nicht von mehreren Programmen (etc.) gleichzeitig verwendet werden:
Einfach fortlaufende Nummern 1,2,3,4... geben
und irgendwo die zuletzt verwendete Nummer mitspeichern.
Mit einem 64bit-Wert dürfte man sehr viele Jahre auskommen,
bevor einem die Nummern ausgehen (es lohnt sich nicht, für den Fall im Programm so
vorzusorgen, dass es noch funktionieren würde. Einfach weglassen)

Mit gleichzeitigem Zugriff hätte man sich mit einem Schlag einige Arbeit gemacht,
die durch DBMS wie MySQL, Oracle...um einiges erleichtert wird.
Transaktionszeug usw. verwendungsfertig drin.
 
Hallo sheel,

an fortlaufende Nummern habe ich bereits gedacht, ich kann sie aber leider nicht verwenden, da jeder einzelne Datensatz von der Erzeugung her unabhängig voneinander ist. Das heißt, das Programm wird mehrmals unabhängig voneinander ausgeführt, so dass das gerade laufende Programm nicht weiss, welche Nummern bereits vergeben sind.

Viele Grüße aus Rheinland,

Eure Ratna
 
Hallo vanilla,

danke für die Idee, habe ich soeben rausprobiert. Ich würde gerne nicht mehr als 16 Stellen überschreiten. Ich habe soeben geschaut, eine randomUUID mit wenigen Stellen gibt es leider nicht?

Viele Grüße aus Rheinland,

Eure Ratna
 
Um noch einmal auf den Hash zurück zu kommen: Woraus hättest du den denn generiert?
Abhängig von irgendwelche Daten (der Person?) muss er ja sein.

Und das mit dm mehrfachen Programm ist eben ein Problem, angefangen damit,
überhaupt mehrmls Schreibzugriff auf die Datei zu bekommen usw.usw.
->Zentrales Dateiverwaltungsprozess sehr hilfreich bzw. nötig
->Datenbank
 
Zurück