Wieso eigentlich so umständlich? Man kommt auch ganz ohne die beiden Arrays aus:
Delphi-Quellcode:
function generateKey(Input: String): String;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(Input) do
Result := Result + IntToStr(2 * (Random(5)) + StrToInt(Input[I]));
end;
Eine Gerade Zahl erhält man, indem man 2*n rechnet (bzw. 2*n + 0), wobei n eine Zahl von 0 bis 4 ist, um nur einstellige Zahlen zu erwischen.
Eine Ungerade Zahl erreicht man durch 2*n + 1.
Es wird also einfach das Zeichen aus dem String erst in einen integer umgewandelt, danach zu den 2*n dazuaddiert (so erhält man die Ziffer) und anschließend (zurück als String) an das bestehende Ergebnis angehangen.
Random(5) erzeugt dabei die Zahl zwischen 0 bis 4. (Randomize nicht vergessen im FormCreate)
PS: Code nicht getestet
EDIT: Random angepasst