Validar RUT!
Pascal
Program DigitoVerificador;
Uses Crt;
Var s, d: String;
elFactor, i, a, digito, dummy: Integer;
PROCEDURE Input(mensaje: String; VAR numero: String);
VAR s: String; ch: Char;
ready: Boolean;
BEGIN
s:='';
ready:=FALSE;
Write(mensaje);
REPEAT
ch:=ReadKey;
CASE ch OF
'0': IF s='' THEN BEGIN
s:=ch;
Write(ch);
END ELSE IF (s<>'0') THEN BEGIN
s:=Concat(s,ch);
Write(ch);
END;
'1'..'9': IF (s='0') THEN BEGIN
s:=ch;
Write(#8, s);
END ELSE BEGIN
s:=Concat(s,ch);
Write(ch);
END;
#8: IF s<>'' THEN BEGIN { backspace elimina el último }
s:=Copy(s,1,Length(s)-1); { caracter del string
(siempre }
Write(#8,' ',#8); { que éste no sea vacío) }
END;
#13: IF (s='') THEN Write(#7) ELSE ready:=TRUE;
{ ENTER: listo para transformar a }
{ número, pero no acepta uno nulo }
ELSE ; { no hacer caso a ninguna otra tecla }
END; {case}
UNTIL ready;
Writeln;
numero:=s; { retornar el valor ingresado }
END;
FUNCTION Factor: Integer;
BEGIN
if ((elFactor<2) or (elFactor>7)) THEN BEGIN
writeln('ERROR EN LA EJECUCION DEL PROGRAMA - MEJOR ABORTO.');
Halt(1);
END ELSE BEGIN
elFactor:=elFactor+1;
IF (elFactor=8) THEN elFactor:=2;
END;
Factor:=elFactor;
END;
BEGIN
Writeln('Para finalizar, ingrese el RUT 0');
Writeln;
REPEAT
elFactor:=7; a:=0;
Input('Ingrese el RUT sin guión ni dígito verificador :', s);
FOR i:=Length(s) DOWNTO 1 DO BEGIN
d:=Copy(s,i,1);
Val(d,digito,dummy);
a:=a+digito*Factor;
END;
a:=11-(a MOD 11); IF (a=11) THEN a:=0;
write('El RUT ingresado es: ', s, '. El dígito verificador es: ');
IF (a<>10) THEN writeln(a) ELSE writeln('K');
writeln;
UNTIL (s='0');
END.