M.: String in Interger wandeln

Mahlzeit,
gegeben ist ein String in diesem Format:

02456490-24b6-d38b-7984-5fe1683298db

Daraus sollte ein int(11) generiert werden. Diese int muss eindeutig dem String zugeordnet werden können, bzw. sollte sich aus der int wieder der String generieren lassen.

Mein Problem ist, ein System kann nur den String, das andere nur int. Um diese zu Verknüpfen, will ich nur im Notfall auf ne Wrapper-Tabelle zurückgreifen.

Gibts da schon was fertiges (lib zum Einbinden o.ä.) oder zumindest nen Denkansatz? In dem Bereich hab ich keine Erfahrung, da ich mit Ver- / Entschlüsselung bisher nichts gemacht hab, ausser ne fertige Funktion aufzurufen ;)

Gerne auch was in ner anderen Programmiersprache, was ich mir dann portieren kann.

thx4hlp

  1. Tach!

    gegeben ist ein String in diesem Format: 02456490-24b6-d38b-7984-5fe1683298db
    Daraus sollte ein int(11) generiert werden.

    Wenn, dann würde ich ja unsigned int(10) haben wollen. Aber auch mit unsigned bigint (64-Bit-Integer) lässt sich dieser Wert nicht darstellen. Benötigt wird eine 128-Bit-Struktur.

    Diese int muss eindeutig dem String zugeordnet werden können, bzw. sollte sich aus der int wieder der String generieren lassen.

    Das ist unter den gegebenen Voraussetzungen unmöglich. 2^128 Werte lassen sich nicht mit 2^64, geschweige denn mit 2^32 Möglichkeiten darstellen.

    dedlfix.

    1. Du hast meine Befürchtungen erstmal bestätigt. Vielleicht fällt ja noch jemanden ein Kniff ein, ohne dass ich in die einzelnen Systeme eingreifen muss.

      Danke trotzdem :)

  2. Hallo,

    gegeben ist ein String in diesem Format:

    02456490-24b6-d38b-7984-5fe1683298db

    Daraus sollte ein int(11) generiert werden. Diese int muss eindeutig dem String zugeordnet werden können, bzw. sollte sich aus der int wieder der String generieren lassen.

    ist dir bewusst, dass du hier einen Zahlenbereich von 128bit (32 Hex-Ziffern) hast? Welches System kann so große int-Werte verarbeiten? AFAIK sind mit derzeitigen Implementierungen maximal 64bit drin. Wir sind also bei mindestens zwei int-Werten, oder sogar mehr, wenn das ganze noch 32bit-safe sein muss.

    Mein Problem ist, ein System kann nur den String, das andere nur int. Um diese zu Verknüpfen, will ich nur im Notfall auf ne Wrapper-Tabelle zurückgreifen.

    Reichen eventuell die ersten acht Stellen (32bit) für die eindeutige Identifizierung? - Ach was, hilft ja auch nicht, wenn das Ganze auch wieder zurück gewandelt werden muss.

    Gibts da schon was fertiges (lib zum Einbinden o.ä.) oder zumindest nen Denkansatz? In dem Bereich hab ich keine Erfahrung, da ich mit Ver- / Entschlüsselung bisher nichts gemacht hab, ausser ne fertige Funktion aufzurufen ;)

    PHP bietet die arbitrary precision math functions, vielleicht hilft dir das. De facto werden die Zahlen dabei auch als Strings gespeichert, es stehen aber auch Rechenoperationen zur Verfügung.

    So long,
     Martin

    --
    Ich wollt', ich wär ein Teppich.
    Dann könnte ich morgens liegenbleiben.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. ist dir bewusst, dass du hier einen Zahlenbereich von 128bit (32 Hex-Ziffern) hast? Welches System kann so große int-Werte verarbeiten?

      Das ist nicht zwingend eine Hexzahl, das ist ein String aus zufälligen Zeichen aus Ziffern und Buchstaben. Also ein astreiner String.

      Reichen eventuell die ersten acht Stellen (32bit) für die eindeutige Identifizierung? - Ach was, hilft ja auch nicht, wenn das Ganze auch wieder zurück gewandelt werden muss.

      Würde eh nicht helfen. Da der String eine zufällige Zeichenfolge ist, können die ersten acht Stellen theoretisch mehrfach vorkommen.

      PHP bietet die arbitrary precision math functions, vielleicht hilft dir das. De facto werden die Zahlen dabei auch als Strings gespeichert, es stehen aber auch Rechenoperationen zur Verfügung.

      Das schau ich mir in jedem Fall mal an. Danke

      1. Hi,

        ist dir bewusst, dass du hier einen Zahlenbereich von 128bit (32 Hex-Ziffern) hast? Welches System kann so große int-Werte verarbeiten?
        Das ist nicht zwingend eine Hexzahl, das ist ein String aus zufälligen Zeichen aus Ziffern und Buchstaben. Also ein astreiner String.

        ach so, das war mir nicht klar - denn dein Beispiel sieht aus wie die typischen GUIDs. Wenn das beliebige Buchstaben und/oder Ziffern sein können, erhöht sich die Zahl der Möglichkeiten und damit die "Breite" eines Integers mit gleichem Informationsgehalt nochmal um ein Vielfaches.

        PHP bietet die arbitrary precision math functions, vielleicht hilft dir das. De facto werden die Zahlen dabei auch als Strings gespeichert, es stehen aber auch Rechenoperationen zur Verfügung.
        Das schau ich mir in jedem Fall mal an. Danke

        Ich bin inzwischen skeptisch, ob dir das wirklich helfen könnte.

        Ciao,
         Martin

        --
        Treffen sich zwei Holzwürmer im Käse: "Na, auch Probleme mit den Zähnen?"
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Ich bin inzwischen skeptisch, ob dir das wirklich helfen könnte.

          Das hilft mit Sicherheit nicht ;) Aber eine gute Gelegenheit, sich mal reinzulesen, wer weiss, wann ich es mal brauchen kann :)

  3. bzw. sollte sich aus der int wieder der String generieren lassen.

    Du kannst den md5 Hashwert aus dem int bilden.

    1. bzw. sollte sich aus der int wieder der String generieren lassen.
      Du kannst den md5 Hashwert aus dem int bilden.

      Wovon sprichst du? Nicht jede Hex-Ziffernfolge ist ein MD5-Streuwert.

      Das sieht eher mehr nach einer GUID oder UUID aus.

      1. bzw. sollte sich aus der int wieder der String generieren lassen.
        Du kannst den md5 Hashwert aus dem int bilden.

        Wovon sprichst du? Nicht jede Hex-Ziffernfolge ist ein MD5-Streuwert.

        Das sieht eher mehr nach einer GUID oder UUID aus.

        Ja, aber einen MD5-Hashwert kann ich genau so formatieren. Damit kann man, wenn man den int-Wert als führend betrachtet, eine Umwandlung ohne Wrappertabelle vornehmen.
        Jedenfalls, wenn ich das "bzw." im Satz als oder- und nicht als und-Verknüpfung betrachte.

        1. Wobei man den natürlich auch gleich in den String schreiben könnte.

    2. Du kannst den md5 Hashwert aus dem int bilden.

      Das Problem ist, ich hab den String und brauch ne int. Und der STring ist kein Hexwert sondern, wie bei Martin schon geschrieben, eine Reihe von Zufallszeichen aus Buchstaben und Ziffern.

      Ich werd wohl doch mit ner Wrappertabelle arbeiten müssen. Da hier eh zwei Datenbanken über eine dritte verknüpft werden (Zwei Systeme, die über ein drittes verknüpft werden), ist das kein grosses Problem, wäre halt ohne schöner gewesen ;)

      Danke auf jeden Fall an alle, die sich Gedanken gemacht haben. :)

      1. hi,

        Danke auf jeden Fall an alle, die sich Gedanken gemacht haben. :)

        Keine Ursache. Ich denke gerne mit.

        Horst