function encode(text: AnsiString;
const UnformatCharKey: Char):AnsiString;
{text = zu codierender Text; key = Schlüssel zur Alphabetsverschiebung[A..Z]}
{Groß-/Kleinschreibung ist beim Schlüssel egal}
{Ergebnis der Funktion ist der verschlüsselte Text}
{Zeichencode: Ansi}
var
i: Integer;
{Laufindex für die Position des aktuell bearbeiteten Chars in "text"}
DecodedChar: Integer;
{Nicht-Codiertes Zeichen aus "text" in ANSI-Ordinalzahlen}
EncodedChar: Integer;
{Codiertes Zeichen aus "text" in ANSI-Ordinalzahlen}
UnformatetOrdKey: Integer;
{Ordinalwert des nicht umgerechneten Keys in ANSI-Codierung}
SpecialCharacters1:
set of 1..64;
{Menge der Sonderzeichen aus der ANSI-Tabelle in Ordinalzahlen}
SpecialCharacters2:
set of 91..96;
{-''-}
SpecialCharacters3:
set of 123..255;
{-''-}
SmallLetters:
set of 97..122;
{Menge der Kleinbuchstaben aus der ANSI-Tabelle in Ordinalzahlen}
CapitalLetters:
set of 65..90;
{Menge der Großbuchstaben aus der ANSI-Tabelle in Ordinalzahlen}
OrdinalKey: Integer;
{Ordinalwert des Keys (a=0, b=1, usw.)}
TemporaryNumber: Integer;
{Temporär benutzte Zahl}
begin
{Denn Key in einen Großbuchstaben umrechnen, wenn er ein Kleinbuchstabe ist und dann als Ordinalwert ausgeben}
if ord(UnformatCharKey)
in SmallLetters
then UnformatetOrdKey := ord(upcase(UnformatCharKey))
else UnformatetOrdKey := ord(UnformatCharKey);
{Umlaute ersetzen}
StringReplace(text,'
ä','
ae',[rfReplaceAll]);
StringReplace(text,'
ö','
oe',[rfReplaceAll]);
StringReplace(text,'
ü','
ue',[rfReplaceAll]);
StringReplace(text,'
Ä','
Ae',[rfReplaceAll]);
StringReplace(text,'
Ö','
Oe',[rfReplaceAll]);
StringReplace(text,'
Ü','
Ue',[rfReplaceAll]);
StringReplace(text,'
ß','
s',[rfReplaceAll]);
EncodedChar := 0;
i := 1;
repeat
DecodedChar := ord(text[i]);
if DecodedChar
in SpecialCharacters1
then EncodedChar := DecodedChar;
if DecodedChar
in SpecialCharacters2
then EncodedChar := DecodedChar;
if DecodedChar
in SpecialCharacters3
then EncodedChar := DecodedChar;
if DecodedChar
in SmallLetters
then
begin
OrdinalKey := UnformatetOrdKey-65;
EncodedChar := DecodedChar+OrdinalKey;
if EncodedChar>122
then
begin
TemporaryNumber := EncodedChar-122;
EncodedChar := 96+TemporaryNumber;
end;
end;
if DecodedChar
in CapitalLetters
then
begin
OrdinalKey := UnformatetOrdKey-65;
EncodedChar := DecodedChar+OrdinalKey;
if EncodedChar>90
then
begin
TemporaryNumber := EncodedChar-90;
EncodedChar := 64+TemporaryNumber;
end;
end;
result[i] := chr(EncodedChar);
i := i+1;
until i=(length(text))+1;
end;