Benutzer mit den meisten Antworten
String 'verkürzen'

Frage
-
Hallo,
für eine Validierung wird in einem Programm eine lange ID erstellt (z.B. werden zwei Guids konkateniert).
Aufgrund der Einfachheit (diese ID soll z.B. manuell vom User eingegeben werden) soll diese ID gekürzt werden.
Erhält das Programm die gekürzte ID, muss es diese zunächst wieder 'vergrößern' um die Validierung durchzuführen.
Hat jemand eine Idee, wie ich eine solche Verkürzung umsetzen kann?
Danke und Grüße,
Christian
Antworten
-
Hallo,
wenn du die kürzere Variante wieder in die längere bekommen willst, dann wird es schwierig. Du kannst in diesem Fall auf ein Komprimierungsverfahren setzen. Jedoch lohnt es sich bei so kleinen Datenmengen (weit unter einem kb) nicht, die Zeichenfolge würde vielleicht sogar länger. Da müsstest du dir wahrscheinlich trotzdem selbst etwas ausdenken, da die Standardverfahren auch Zeichen benutzen, die auf keiner Tastatur verfügbar sind.Wenn du dagegen nur eine art Prüfsumme ermitteln willst, dann kannst du auf verschiedenste Weißen Hashcodes erzeugen. MeinString.GetHashCode() liefert dir einfach eine Zahl (Int32). Es gibt aber auch Verfahren, die eindeutiger arbeiten[1]. Beispiele findest du hier.
[1] Richtig Eindeutig ist kein Hash.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Christian315 Dienstag, 12. November 2013 11:30
Alle Antworten
-
Hallo,
wenn du die kürzere Variante wieder in die längere bekommen willst, dann wird es schwierig. Du kannst in diesem Fall auf ein Komprimierungsverfahren setzen. Jedoch lohnt es sich bei so kleinen Datenmengen (weit unter einem kb) nicht, die Zeichenfolge würde vielleicht sogar länger. Da müsstest du dir wahrscheinlich trotzdem selbst etwas ausdenken, da die Standardverfahren auch Zeichen benutzen, die auf keiner Tastatur verfügbar sind.Wenn du dagegen nur eine art Prüfsumme ermitteln willst, dann kannst du auf verschiedenste Weißen Hashcodes erzeugen. MeinString.GetHashCode() liefert dir einfach eine Zahl (Int32). Es gibt aber auch Verfahren, die eindeutiger arbeiten[1]. Beispiele findest du hier.
[1] Richtig Eindeutig ist kein Hash.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Christian315 Dienstag, 12. November 2013 11:30
-
Hi Christian,
wenn ich jetzt ID höre gehe ich von einen eindeutigen Wert aus. Mir ist jetzt nicht klar wie das Mathematisch funktionieren soll. Da die Menge A ja 1 zu 1 auf die Menge B abgebildet werden soll. Müssen Menge A und Menge B also die gleiche Anzahl an Elemente haben.
Was du natürlich machen kannst ist für die Eingabe einen erweiterte Zeichensatz zulassen, bzw deine ID einschränken. Ein einfaches Beispiel währe z.B. für deine ID nur Zahlen zu zu lassen und für deine Eingabe noch Buchstaben dazu nehmen. Dann währe z.B. Z = 36.
Mir ist aber nicht klar was das Bringen soll auser Rechenleistung zu fressen.
MFG
Björn
-
Hallo Christian,
letztendlich wirst Du da um ein Mapping nicht herumkommen.
D.h. Du musst dir die Zuordnung zwischen langer und kurzer ID irgendwo merken. Je nach genauer Anforderung kann das eine Datenbank, eine Textdatei, eine (serialisierte) XML Datei, InMemory, ... sein.
Wenn die Zeitspanne zwischen Erzeugung und Verwendung länger sein kann, würde ich einen persistenten Datenspeicher wie bspw. eine Datenbank empfehlen. Das natürlich auch, wenn es um eine große Anzahl an solchen IDs geht.
Das Verfahren kennt man in ähnlicher Form von UrlShortern. Die gehen dann auch hin und mappen die vergebene ID mit der langen Url.
Damit man dir aber ein Beispiel zeigen kann, müsstest Du uns erstmal ein paar mehr Details zu deinen genauen Anforderungen verrraten, sonst ist das eher ein Ratespiel und meine Glaskugel hat leider grade Urlaub. (Hmmmpf, da fällt mir auf, dass die schon seit 8 Wochen hätte wieder da sein sollen. Faules Stück.)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi Stefan,
vielen Dank für Deine Hilfe!
Die ID muss evtl. vom Benutzer telefonisch durchgegeben und sollte daher möglichst kurz sein.
Ich werde einfach einen Hash bilden und diesen verwenden.
Du solltest Deiner Glaskugel evtl. den Boni runterschrauben ;-)
Viele Grüße,
Christian -
Hallo Christian,
achte dann nur darauf, dass Zeichen wie 1 l | und 0 O Probleme bereiten können. Daher lässt man die bei der Erzeugung solcher Zeichenfolgen oftmals außen vor, um Lesefehler zu vermeiden. Je nach Schriftart sind die Zeichen nicht oder nicht gut zu unterscheiden und der User wundert sich dann, warum sein String nicht akzeptiert wird :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community