Archiv verlassen und diese Seite im Standarddesign anzeigen : Eindeutige und reversible Kodierung zweier Zahlen?
Mahlzeit,
ich hab hier zwei (max) zehnstellige Zahlen, die ich irgendwie eindeutig in ein max zwölfstelligen Feld kodieren muss. Das ganze natürlich reversibel, da ich bei Zahlen wieder brauche.
Hab mir grad schon die Finger wund gegoogelt, aber nichts brauchbares gefunden ...
Jemand eine Idee?
LG
MacLeod
fireball
25.07.2011, 14:57
Ist das 12stellige Feld numerisch, oder haste da mehr Möglichkeiten? Wenn mehr (also z.B. Buchstaben), kann man doch sehr schön auf eine Zahlenbasis deutlich größer als 10 umschwenken (Hexadezimal langt nicht, aber unter Zuhilfenahme des kompletten Buchstabensatzes von a-z sollte man locker hinkommen ;) )
http://en.wikipedia.org/wiki/Hexavigesimal
1. 10stellige Zahl -> nach "base26" ;) - vorne Stellen mit 0 auffüllen auf 6 Stellen
2. 10stellige Zahl -> siehe 1.
Strings concatenieren -> fertig
rückwärts entsprechend (String in der Hälfte teilen, zurückwandeln)
Edit: Hexavidesimal langt nicht, wenn man noch 0-9 dazunimmt, kommt man langsam hin... zur Not Sonderzeichen, Gross/Kleinbuchstaben...
http://snippets.dzone.com/posts/show/4594
(http://snippets.dzone.com/posts/show/4594)
Der zwölfstellige Wert ist ein Char-Feld (Abap-Type C).
fireball
25.07.2011, 15:22
Ja dann ist das doch kein Problem - brauchst nur nen hinreichenden Zeichenvorrat :) - oder muss das lesbar bleiben? Dann wirds blöd... ;)
Nö muss nicht lesbar bleiben, ist programmintern. Hauptsache ich bekomm den Key zum Schluss wieder eindeutig in seine zwei Ausgangswerte zerlegt ...
fireball
25.07.2011, 15:28
Joa - dann siehe oben. Die Lösung steht ja schon komplett da - und beschränkt sich auf ca. 20 Zeilen Code, so über den Daumen... 40 Zeichen müssten reichen.
Schonmal was von Base64 gehört? :)
Das ist sogar absolut standardisiert und es gibt in jeder gängigen Programmiersprache Funktionen oder Bibliotheken um damit zu arbeiten.
Damit kriegste deine zwei Zahlen locker in 12 Stellen unter.
Base64 nutzt, wie der Name vermuten läßt, ein Zahlensystem zur Basis 64 und nutzt für dessen Repräsentation die Zahlen 0-9, das kleine (a-z) sowie das große (A-Z) Alphabet, einige normale, druckbare ASCII-Zeichen (wie .,-=()!?; etc.) - insgesamt eben 64 mögliche Zeichen - und lässt sich somit in allen alphanumerischen Feldern speichern.
Es wird z.B. auch genutzt, um Binärdateien per E-Mail zu versenden, oder Grafiken "inline" in HTML zu kodieren etc. (Das sind dann so Strings wie "=\qiNffASDUuifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAjbdfAAAAAAAAAAA" oder so - nur natürlich meistens noch was länger.... ;).
Gruß kzuse
tach auch !
Man könnte natürlich auch
Gödelisieren:
http://de.wikipedia.org/wiki/G%C3%B6delisierung
;)
fireball
25.07.2011, 18:12
Schonmal was von Base64 gehört?
Vollkommen egal, ob Base64 oder Base40 oder selbstprogrammieren, um es zu verstehen ;)
Ich habs anders gelöst, den Algorithmus wollte nicht so ganz unter ABAP ...
Genau sowas hab ich unter ABAP schon mal programmiert - das gleiche Problem hatte ich nämlich auch schon mal. ;)
Zusätzlich war der Zeichenvorrat (A-Z, a-z, 0-9) durcheinandergewürfelt, damit nicht auf Anhieb erkennbar ist, wie die Zahlen in dem Wert kodiert sind - das Ergebnis wurde als Bestätigungscode o.ä. verwendet.
Hab einfach eine interne Tabelle genommen, die drei Spalten hat: S1 eindeutiger Keywert, S2+3 die beiden zu merkenden Werte.
Ansonsten kannst Du mir gern mal Deinen Code per PM schicken, sofern es kein Dienstgeheimnis darstellt und Du dann Ärger bekommst ;)
Ein Dienstgeheimnis würde der Code bestimmt nicht darstellen, aber ich arbeite seit einigen jahren schon nicht mehr bei der großen Firma mit den drei Buchstaben, die ABAP auf dem Gewissen hat - von daher komme ich auch nicht mehr an den Code ran. ;)
In welchem System isses drin? Ich kann nachgucken :D
Gruß,
Quentin
Oh je, bis Du das gefunden hast, hat MacLeod das mehrfach neu programmiert (wenn's das überhaupt noch gibt) :) Ich weiß ja nicht mal mehr, wann das war, in welchem Programm oder in welchem System (vermutlich seinerzeit BCE oder AHR, aber sicher bin ich mir nicht).
(wenn Dich jetzt trotzdem der Ehrgeiz packt: FLECKA oder d028477 sind gute Startpunkte ;))
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.