Ver Mensaje Individual
  #4  
Antiguo 20-12-2016
osmardj osmardj is offline
Miembro
 
Registrado: nov 2016
Posts: 18
Reputación: 0
osmardj Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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;

// Check number
// return true if check digit in number is correct, false otherwise
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;

// Calculate check digit for a given number
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;

// Get number and check it
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.
Responder Con Cita