AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Eindeutige ID aus einem String berechnen

Eindeutige ID aus einem String berechnen

Ein Thema von Bünni · begonnen am 18. Apr 2019 · letzter Beitrag vom 25. Apr 2019
Antwort Antwort
Seite 1 von 3  1 23   
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#1

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 01:51
Meinst du damit GUID := System.SysUtils.StringToGUID('test') ?

Laut fandom funktioniert das nur mit Strings im GUID Format
https://delphi.fandom.com/wiki/StringToGUID_Routine

Geändert von Bünni (19. Apr 2019 um 01:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.248 Beiträge
 
Delphi 12 Athens
 
#2

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 08:31
CRC ist eine Kontrollsumme, die es dir erlaubt, zu prüfen, ob ein String verändert wurde. CRCs sind nicht eindeutig, soll heißen, unterschiedliche Strings können gleiche CRCs haben.

Eine Hash-Funktion wäre eine Möglichkeit, aber da kann es auch zu Kollisionen kommen.

Du kannst ein Lexikon anlegen + deine Strings nummerieren.
Du kannst die Zahlenwerte der Zeichen nehmen und so eine Zahl erzeugen, die ist eindeutig (sogar eineindeutig, weil umkehrbar).

Was magst denn machen, mit den IDs + was sind denn das für Strings?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 08:47
.. von wievielen Strings sprechen wir denn hier?

was zum Lesen: https://ethblog.de/wie-funktioniert-hashing/
https://arstechnica.com/civis/viewtopic.php?t=149670

eine GUID ist nicht wesentlich kürzer als z.B. ein MD5 Hash

Grüße
Klaus
Klaus

Geändert von Klaus01 (19. Apr 2019 um 10:02 Uhr)
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#4

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 10:12
Ich brauche diese ID leider. MD5 und andere Hashes sind zu lang, da ich sonst Probleme mit zu langen Pfaden im Dateisystem bekommen könnte (nicht sicher).
Anders als aus einem String kann ich die ID auch nicht berechnen, da ich nur den String als Basisinformation habe.

Anhand des Strings wird ein Verzeichnis angelegt. Der String wird vorher aber bereinigt und unzulässige Zeichen und andere besondere Zeichen entfernt.
Es gibt Konstellationen, da bleibt am Ende das gleiche Ergebnis übrig. Deswegen würde ich gerne eine ID hinten dranhängen.

Eine GUID würde ich gerne vermeiden da man so nie weiß welches Verzeichnis mit welcher GUID zu welchem Datensatz gehört.

Geändert von Bünni (19. Apr 2019 um 10:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#5

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 10:19
Kannst du nicht einfach laufende Nummern verwenden und dir irgendwo ein Verzeichnis anlegen, in dem du dir die Zuordnung von String zu Nummer (= Name des Ordners) merkst?
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#6

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 10:26
Jeder Datensatz hat intern einen Index, der sich aber bei jedem Programmstart ändern kann je nachdem, ob die Daten verändert wurden oder nicht. Im Normalfall ist davon auszugehen, dass sich die Daten bei jeder Sitzung mindestens einmal stark ändern. Leider nicht möglich mit einem Index.

Eine GUID wäre eventuell eine Lösung, wenn ich sie auch für jeden Datensatz in der Konfigurationsdatei mit ablege.
Aber wie berechnet man eine korrekt formatierte GUID aus einem String?

Geändert von Bünni (19. Apr 2019 um 10:38 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 10:41
Ob der MD5 HashWert in der Darstellung zu lang wird, hat doch nur etwas mit der Art der Darstellung zu tun.

Ein MD5-HashWert hat 128-bit. Diesen kann man Hexadezimal darstellen und erhält 32 Zeichen.
Code:
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Zu lang? Dann hätten wir da noch eine Base64-Darstellung und erhalten von dem gleichen Wert
Code:
/////////////////////w==
also 24 Zeichen (bzw. 22 denn die letzten beiden sind in diesem Falle immer gleich).

Also, wie lang darf die errechnete ID aus dem String denn nun sein?

PS: Wer jetzt einwenden möchte, dass in dem Base64 Zeichen vorkommen, die in einem Pfad nicht vorkommen dürfen, der hat Recht und ich überlasse es jedem selber dieses mit etwas Fantasie selber zu lösen.
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#8

AW: Eindeutige ID aus einem String berechnen

  Alt 19. Apr 2019, 10:46
So gesehen darf die ID so lang sein, bis das Dateisystem damit nicht mehr zurecht kommt. Der besseren Lesbarkeit aber dachte ich, je kürzer desto besser.

Ich glaube CRC32 reicht nachdem ich mir die Antwort von Victor Stoddard durchgelesen habe
https://stackoverflow.com/questions/...for-common-use

Und dann wäre da noch S. Lott
https://stackoverflow.com/questions/...-vs-crc-length

Geändert von Bünni (19. Apr 2019 um 11:01 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
492 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Eindeutige ID aus einem String berechnen

  Alt 20. Apr 2019, 01:08
Bedenkt, dass Hashes ebenso nicht "eindeutig" sind, da zu jedem Hash auch unbegrenzt viele Strings gehören.
CRC32 ist nur deshalb keine Hashfunktion, weil du aus ihr den eigentlichen String sehr leicht wieder zurückgewinnen kannst. Dennoch hast du das gleiche Problem, wenngleich graduell geringer, auch bei Hashfunktionen (was diese von "Verschlüsselungen" unterscheidet).
Es gibt so gesehen keine wirklich effiziente Möglichkeit, einen String in eine Zahl zu verwandeln, die wirklich eindeutig ist, ohne den vollen String selber zu beinhalten.
Was du machen könntest, wäre noch folgendes (keine sichere Verschlüsselung!):
Jedes ACSII-Zeichen befindet sich im Bereich von 0 bis 127. Solltest du also nur diese Zeichen brauchen, kannst du den zweiten teil des Bytes hinten weg lassen und mit dem nächsten Zeichen füllen. Ist aber auch nicht 100%-ig eindeutig, und vor allem nur für Zeichen des Standardzeichensatzes.
Dennis
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#10

AW: Eindeutige ID aus einem String berechnen

  Alt 20. Apr 2019, 09:05
Ich klinke mich mal mit ein:
Der Threadersteller möchte eine eindeutige ID. CRC ist nicht dazu gedacht, eindeutige IDs zu generieren, da eine Kollision zu schnell herbeigeführt werden kann. Wikipedia gibt dazu als Beispiel die Wörter "buckeroo" und "plumless" an, die den gleichen CRC32-Wert besitzen. Die Wahrscheinlichkeit, dass der Threadersteller eine Kollision erhält, ist nicht unwahrscheinlich.

*edit*
Ich habe mir den ganzen Thread nochmal durchgelesen. Der Sinn des Ganzen erstreckt sich mir zwar nicht, aber von CRC würde ich absehen. Eine fortlaufende Nummer reicht da in meinen Augen als eindeutige Identifizierung.

Geändert von Nju (20. Apr 2019 um 09:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz