Buenas!
Aqui vengo yo... con un código revolucionario. No usa recursividad, pero debido a no se... solo funciona correctamente si se pasa cadena en mayusculas. Por más que le meta ansiuppercase(), no funciona.


Si alguno le ve el error avise.
Bueno no más espera, aqui suelto al bicho. Guarda que muerde
EDITO:Realizado en D6.
Código Delphi
[-]unit UCode;
interface
uses
SysUtils;
const
MAX_LEN = 14;
ALPHA = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function NewCode(Code: string): string;
implementation
function EvaluateRule(Character: char; var Changes: boolean): char;
var Posic, MaxChar: integer;
begin
Posic := Pos(Character,ALPHA);
Changes := (Posic = 9) OR (Posic = Length(ALPHA));
inc(Posic);
if Posic = (Length(ALPHA) + 1)
then MaxChar := 10
else if Posic = 11
then MaxChar := -10
else MaxChar := 0;
result := ALPHA[(Posic mod Length(ALPHA)) + MaxChar];
end;
function NewCode(Code: string): string;
var i,len: integer;
AuxCode: string;
FindChanges: boolean;
begin
len := Length(Code);
if Len <> MAX_LEN
then raise Exception.Create('El código no es de MAX_LEN caracteres!');
i := MAX_LEN + 1;
FindChanges := False;
AuxCode := Copy(Code,1,MAX_LEN);
AuxCode := AnsiUpperCase(AuxCode);
repeat
i := i - 1;
AuxCode[i] := EvaluateRule(Code[i],FindChanges); until NOT FindChanges;
result := AuxCode;
end;
end.
Y/o por las dudas, lo adjunto.
Saludos,