Código: Seleccionar todo

Function Beaufort (A : String; B : String) : String;
{'==============================================================='}
{' AX: Cifrado Beaufort                                          '}
{' Uso: Beaufort('Texto', 'clave')                               '}
{' Dedicado a Corp-51                                            '}
{'==============================================================='}

Var D : String;
Var E : String;
Var F : LongInt;
Var G : Integer;
Var H : Integer;
Var I : String;
Begin

If Length(A) = 0 Then Exit;
If Length(B) = 0 Then Exit;

D := Trim(StringReplace(UpperCase(A), ' ', '', [rfReplaceAll]));
E := Trim(StringReplace(UpperCase(B), ' ', '', [rfReplaceAll]));

If Length(E) < Length(D) Then Begin
For F := 1 To Length(D) - Length(E) Do E := E + Copy(E, F, 1);
end;

For F := 1 To Length(D) Do Begin
G := Ord(Copy(D, F, 1)[1]);
H := Ord(Copy(E, F, 1)[1]);
If (H - G) = Abs(H - G) Then I := I + Chr((H - G) + 65) Else I := I + Chr(27 - Abs(H - G) + 65);
end;

Beaufort := I;
end;
Hola a todos...Esta es la función Beaufort (Cifrado Beaufort), que es muy parecido a Vigenère. Su utilización es muy sencilla y cualquier duda coménten!

Saludos.
se le agradece el aporte hermano "AX"
http://Corp-51.net --->RIP 2010-2014
Firma eliminada por spam. .l.
Blog: www.blackophn.blogspot.com
Imagen
Gracias por el aporte AX, muy limpio el código, no sabía que le dabas también a delphi, xD una cosita insignificante si vas a hacer dos sentencias if seguidas, mejor haz una sola y colocas el operador and :P te ahorras una linea.
//mHmm..
linkgl escribió:Gracias por el aporte AX, muy limpio el código, no sabía que le dabas también a delphi, xD una cosita insignificante si vas a hacer dos sentencias if seguidas, mejor haz una sola y colocas el operador and :P te ahorras una linea.
Tienes mucha razón, me ahorro una línea.

Código: Seleccionar todo

If Length(A) = 0 Then Exit;
If Length(B) = 0 Then Exit;
Pero no sería con el operador And, sino con Or.

Código: Seleccionar todo

If (Length(A) = 0) Or (Length(B) = 0) Then Exit;

Código: Seleccionar todo

Function Beaufort (A : String; B : String) : String;
{'==============================================================='}
{' AX: Cifrado Beaufort                                          '}
{' Uso: Beaufort('Texto', 'clave')                               '}
{' Dedicado a Corp-51                                            '}
{'==============================================================='}

Var D : String;
Var E : String;
Var F : LongInt;
Var G : Integer;
Var H : Integer;
Var I : String;
Begin

If (Length(A) = 0) Or (Length(B) = 0) Then Exit;

D := Trim(StringReplace(UpperCase(A), ' ', '', [rfReplaceAll]));
E := Trim(StringReplace(UpperCase(B), ' ', '', [rfReplaceAll]));

If Length(E) < Length(D) Then Begin
For F := 1 To Length(D) - Length(E) Do E := E + Copy(E, F, 1);
end;

For F := 1 To Length(D) Do Begin
G := Ord(Copy(D, F, 1)[1]);
H := Ord(Copy(E, F, 1)[1]);
If (H - G) = Abs(H - G) Then I := I + Chr((H - G) + 65) Else I := I + Chr(27 - Abs(H - G) + 65);
end;

Beaufort := I;
end;
Saludos y gracias por los comentarios.
AX escribió:
linkgl escribió:Gracias por el aporte AX, muy limpio el código, no sabía que le dabas también a delphi, xD una cosita insignificante si vas a hacer dos sentencias if seguidas, mejor haz una sola y colocas el operador and :P te ahorras una linea.
Tienes mucha razón, me ahorro una línea.

Código: Seleccionar todo

If Length(A) = 0 Then Exit;
If Length(B) = 0 Then Exit;
Pero no sería con el operador And, sino con Or.

Código: Seleccionar todo

If (Length(A) = 0) Or (Length(B) = 0) Then Exit;

Código: Seleccionar todo

Function Beaufort (A : String; B : String) : String;
{'==============================================================='}
{' AX: Cifrado Beaufort                                          '}
{' Uso: Beaufort('Texto', 'clave')                               '}
{' Dedicado a Corp-51                                            '}
{'==============================================================='}

Var D : String;
Var E : String;
Var F : LongInt;
Var G : Integer;
Var H : Integer;
Var I : String;
Begin

If (Length(A) = 0) Or (Length(B) = 0) Then Exit;

D := Trim(StringReplace(UpperCase(A), ' ', '', [rfReplaceAll]));
E := Trim(StringReplace(UpperCase(B), ' ', '', [rfReplaceAll]));

If Length(E) < Length(D) Then Begin
For F := 1 To Length(D) - Length(E) Do E := E + Copy(E, F, 1);
end;

For F := 1 To Length(D) Do Begin
G := Ord(Copy(D, F, 1)[1]);
H := Ord(Copy(E, F, 1)[1]);
If (H - G) = Abs(H - G) Then I := I + Chr((H - G) + 65) Else I := I + Chr(27 - Abs(H - G) + 65);
end;

Beaufort := I;
end;
Saludos y gracias por los comentarios.
x) Ah sí, error mío, me alegro que estes haciendo varios aportes de sources sigue así
//mHmm..
Responder

Volver a “Fuentes”