این الگوریتم کدینگ Rotat13 هست که حالت دایره ای هر حرف رو 13 کاراکتر به سمت جلو یا 13 کاراکتر به سمت عقب حرکت میکنه
کد:
Function CaesarLeft(sString: String; iAmount: Integer):String;
var
i, iPos: Integer;
sAlphabet: String;
begin
sAlphabet:= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
i:= 1;
while i <= Length(sString) do
Begin
if sString[i] = ' ' then
Result:= Result + ' '
else
begin
iPos:= pred(pos(sString[i],sAlphabet));
Result:= Result + sAlphabet[(((iPos + 26) - iAmount) mod 26) + 1];
end;
inc(i);
end;
end;
Function CaesarRight(sString: String; iAmount: Integer):String;
var
i, iPos: Integer;
sAlphabet: String;
begin
sAlphabet:= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
i:= 1;
while i <= Length(sString) do
Begin
if sString[i] = ' ' then
Result:= Result + ' '
else
begin
iPos:= pred(pos(sString[i],sAlphabet));
Result:= Result + sAlphabet[((iPos + iAmount) mod 26) + 1];
end;
inc(i);
end;
end;
روش استفاده
کد:
procedure TForm1.btnLeftClick(Sender: TObject);
begin
memo1.Lines.Text:= CeasarLeft(AnsiUpperCase(Trim(memo1.Lines.Text)),1);
end;
procedure TForm1.btnRightClick(Sender: TObject);
begin
memo1.Lines.Text:= CeasarRight(AnsiUpperCase(Trim(memo1.Lines.Text)),1);
end;
//And for the ROT13 Cipher
procedure TForm1.btnROT13Click(Sender: TObject);
begin
memo1.Lines.Text:= CaesarRight(AnsiUpperCase(Trim(memo1.Lines.Text)),13);
end;