Cita:
Empezado por ecfisa
Hola osmardj.
Por favor muéstranos el código que llevas echo explicándonos en que partes se te presentan dificultades.
Saludos
|
Gracia por responder
encontre el primero el Verhoeff y el codigo que encontre no me devuelve los resultados qe deseo
Código Delphi
[-]program Verhoeff;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
d: array[0..9] of array [0..9] of byte =
((0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
(1, 2, 3, 4, 0, 6, 7, 8, 9, 5),
(2, 3, 4, 0, 1, 7, 8, 9, 5, 6),
(3, 4, 0, 1, 2, 8, 9, 5, 6, 7),
(4, 0, 1, 2, 3, 9, 5, 6, 7, 8),
(5, 9, 8, 7, 6, 0, 4, 3, 2, 1),
(6, 5, 9, 8, 7, 1, 0, 4, 3, 2),
(7, 6, 5, 9, 8, 2, 1, 0, 4, 3),
(8, 7, 6, 5, 9, 3, 2, 1, 0, 4),
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0));
p: array[0..7] of array [0..9] of byte =
((0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
(1, 5, 7, 6, 2, 8, 3, 0, 9, 4),
(5, 8, 0, 3, 7, 9, 6, 1, 4, 2),
(8, 9, 1, 6, 0, 4, 3, 5, 2, 7),
(9, 4, 5, 3, 1, 2, 6, 8, 7, 0),
(4, 2, 8, 6, 5, 7, 3, 9, 0, 1),
(2, 7, 9, 3, 8, 0, 6, 4, 1, 5),
(7, 0, 4, 6, 9, 1, 3, 2, 5, 8));
inv: array[0..9] of byte =
(0, 4, 3, 2, 1, 5, 6, 7, 8, 9);
number: String;
function verhoeffCheck(number: String): boolean;
var
c, digit, i, len: Integer;
begin
c := 0;
len := length(number);
result := false;
for i:=1 to len do
begin
digit := StrToInt(number[len - i + 1]);
c := d[c][p[(i - 1) mod 8][digit]];
end;
if c = 0 then
result := true;
end;
function verhoeffCheckDigit(number: String): integer;
var
c, digit, i, len: Integer;
begin
c := 0;
len := length(number);
for i:=2 to len do
begin
digit := StrToInt(number[len - i + 1]);
c := d[c][p[(i - 1) mod 8][digit]];
end;
result := inv[c];
end;
begin
writeln('Ingrese el Numero');
readln(number);
if verhoeffCheck(number) = true then
writeln('El número es correcto')
else
begin
writeln('El número no es válido');
writeln('Para este número introduzca un dígito de control es válida ' + IntToStr(verhoeffCheckDigit(number)));
end;
readln;
end.
pero como veo no es lo que necesito.
me empece a complicar al ver que esta dificil la cosa.