Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Calcular la letra del NIF (España) (https://www.clubdelphi.com/foros/showthread.php?t=80482)

Neftali [Germán.Estévez] 20-06-2006 13:25:29

Calcular la letra del NIF (España)
 
Es simple, calcula la letra del NIF (España).

Código Delphi [-]
  function NIF(DNI: String): Char;
  const
    STR_CHARS = 'TRWAGMYFPDXBNJZSQVHLCKET';
  begin
    Result := Copy(STR_CHARS, (StrToInt(DNI) mod 23) + 1, 1)[1];
  end;

Gracias a Seoane se añade una funcion para validar el NIF, le pasamos como parametro el documento entero incluido letras y nos devuelve TRUE si es correcto.

Código Delphi [-]
function EsNIFCorrecto(NIF: String): Boolean;
var
  Numero: Integer;
begin
  Result:= FALSE;
  if Length(NIF) = 9 then
  begin
    // Normal
    if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
    // Extranjero
    if Uppercase(Copy(NIF,1,1)) = 'X' then
      if TryStrToInt(Copy(NIF,2,Length(NIF)-2),Numero) then
        Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
  end;
end;

Ejemplo de uso:

Código Delphi [-]
  if EsNIFCorrecto('12345678Z') then
    ShowMessage('Correcto')
  else
    ShowMessage('Incorrecto');

seoane 20-06-2006 13:25:30

Con permiso de German voy a añadir una funcion para validar el NIF, le pasamos como parametro el documento entero incluido letras y nos devuelve TRUE si es correcto.

Código Delphi [-]
function LetraNIF(Numero: Integer): string;
begin
  Result:= copy('TRWAGMYFPDXBNJZSQVHLCKET',1 + numero mod 23,1);
end;

function EsNIFCorrecto(NIF: String): Boolean;
var
  Numero: Integer;
begin
  Result:= FALSE;
  if Length(NIF) = 9 then
  begin
    // Normal
    if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
    // Extranjero
    if Uppercase(Copy(NIF,1,1)) = 'X' then
      if TryStrToInt(Copy(NIF,2,Length(NIF)-1),Numero) then
        Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
  end;
end;

Ejemplo de uso:
Código Delphi [-]
  if EsNIFCorrecto('12345678Z') then
    ShowMessage('Correcto')
  else
    ShowMessage('Incorrecto');

seoane 20-06-2006 13:28:04

Como editar no funciona tengo que corregir asi:

Código Delphi [-]
function EsNIFCorrecto(NIF: String): Boolean;
var
  Numero: Integer;
begin
  Result:= FALSE;
  if Length(NIF) = 9 then
  begin
    // Normal
    if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
    // Extranjero
    if Uppercase(Copy(NIF,1,1)) = 'X' then
      if TryStrToInt(Copy(NIF,2,Length(NIF)-2),Numero) then
        Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
  end;
end;

Neftali [Germán.Estévez] 20-06-2006 14:38:26

Añadidos los comentarios de Seoane al original.

Casimiro Notevi 20-06-2006 15:01:11

Yo lo tengo un poco más simplificado:

Código Delphi [-]
function LetraNIF( NIF:integer): Char;
const S = 'TRWAGMYFPDXBNJZSQVHLCKET';
begin
  result := S[(NIF mod 23)+1];
end;

y la llamada habitual:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
    showmessage( LetraNIF(12345678) );
end;

Mick 20-06-2006 15:51:13

Puestos a simplificar ni funcion ni nada, usar direcatmente
esta linea ;)

PChar('TRWAGMYFPDXBNJZSQVHLCKET')[NIF mod 23]


La franja horaria es GMT +2. Ahora son las 10:33:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi