![]() |
Delphi: Unicode <-> Ansi + Algorithmus für Seriennumme
Hallo zusammen,
ich habe ein großes Problem mit Delphi und kann leider nirgendwo im Internet eine passende Antwort finden: Ich möchte einen String beliebiger Länge in eine Zahlenkette umwandeln, und daraus dann über einen Algorithmus eine Seriennummer erzeugen. Am besten soll diese auch noch umkehrbar sein! Problem 1: Der String wird als Unicode übergeben, der Befehl Ord() funktioniert also nicht. Wie kriege ich diesen String denn nur ins ANSI-Format umgewandelt??? Problem 2: Kennt jemand einen (wenn möglich umkehrbaren) Algorithmus, der aus beliebig vielen Zeichen immer eine Zahlenfolge mit einer festen Zeichenanzahl erzeugt? Ich würde mich echt freuen, wenn mir jemand helfen könnte! Cu, chris |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Hi,
wenn der WideString ANSI Zeichen enthält könntest Du einfach nach string casten, also z.B.
Delphi-Quellcode:
Bei Deinem 2. Problem kann ich Dir leider nicht weiterhelfen :-(
var
WS: WideString; S: string; begin WS := 'wide string'; S := string(WS); // obwohl der Delphi Compiler Dir auch S := WS; durchgehen lässt, aber bei Ord könntest Du so casten end; |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Zitat:
|
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Hi ihr beiden,
vielen Dank für eure Mühe! @mirage228: Unglaublich, auf das Einfachste kommt man einfach nicht :wall: Ich hatte es inzwischen so probiert: Ansi := WideCharToString (pWideChar(Unicode)); @Sharky: Ein MD5-Hash ist leider zu lang. Aber vielleicht könnte ich einen ähnlichen (vereinfachten) Algorithmus verwenden. Hast du eine Ahnung, wie so ein MD5-Hash aufgebaut ist??? Cu, chris |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Wie schon gesagt, ist eine solche umkehrbare Funktion unmöglich. Eine Alternative zum MD5 wäre ein Algorithmus wie der, der die Prüfziffer bei ISBN-Nummern liefert. Den solltest du so erweitern können, dass du mehr als eine Ziffer als Prüfsumme hast.
Bei der ISBN-Prüfnummer läuft das Verfahren so ab, dass du die erste Ziffer mit 1 multiplizierst, die zweite mit 3,.. und die n-te mit n und diese Werte addierst. Danach ermittelst du den Abstand zur nächsten durch 10 teilbare Zahl. Dieser Abstand ist dann die Prüfnummer. Bsp: 12321 -> 1*1+2*2+3*3+2*4+1*5= 26 -> Prüfnummer ist 30-26=4. // So müsste es eigentlich gewesen sein, war mal Klausuraufgabe, aber ich bin mir nicht mehr hindertprozentig sicher. Wenn du jetzt die Faktoren änderst, oder in der anderen Richtung zählst, solltest du damit ein halbwegs brauchbares Ergebniss erhalten können. |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Super Idee, vielen Dank!
Das werde ich gleich morgen mal probieren. Cu, chris |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Zitat:
|
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Zitat:
Du könntest ja einfach nur einen Teil des Hashwertes für die SN verwenden (dadurch wird es natürlich "unsicherer"). z.B.:
Code:
String = Sharky der Haifisch
MD5-Hash = 938C-0D1D-2F14-7EA4-68E7-7D37-F97D-BD49 (ohne die "-" ) Ein Teil davon = 938C-2F14-68E7-F97D |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
@Bernhard Geyer:
Verarbeitet denn die Funktion WideCharToString oder der Typecast mit String(WideString) die Sonderzeichen nicht korrekt? @Sharky: Auch eine sehr gute Idee! Nur, wie kann man mit Delphi einen MD5-Hash erzeugen? Cu, Chris |
Re: Delphi: Unicode <-> Ansi + Algorithmus für Serienn
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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