Inicio › Foros › Lenguajes de programación, desarrollo, código fuente › Delphi › Calcular letra del DNI NIF con Delphi Pascal › Respuesta a: Calcular letra del DNI NIF con Delphi Pascal
12/05/2018 a las 15:42
#3317
alonsojpd
Superadministrador
Puedes usar las dos funciones siguientes, una para obtener la letra a partir del número y la otra que devuelve true o false pasándole un NIF completo (con la letra), comprobando si es correcta:
Delphi/Pascal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//Obtiene la letra del DNI NIF de un número function calcularLetraNIF(numeroDNI : integer): string; begin Result := copy('TRWAGMYFPDXBNJZSQVHLCKET', 1 + numeroDNI mod 23, 1); end; //Comprueba si un NIF DNI es correcto (con letra incluida y extranjero) function comprobarLetraNIF (nif: string): boolean; var numeroDNI : Integer; begin Result := false; if Length(nif) = 9 then begin // DNI normal if TryStrToInt(Copy(nif, 1, Length(nif) - 1), numeroDNI) then Result := UpperCase(Copy(nif, Length(nif), 1)) = calcularLetraNIF(numeroDNI); // DNI Extranjero if UpperCase(Copy(nif, 1, 1)) = 'X' then if TryStrToInt(Copy(nif, 2, Length(nif) - 2), numeroDNI) then Result := Uppercase(Copy(nif, Length(nif), 1)) = calcularLetraNIF(numeroDNI); end; end; |
Y un ejemplo de uso de estas funciones:
Delphi/Pascal
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure TformGUsuario.txtDNIExit(Sender: TObject); begin if (txtDNI.Text <> '') then begin if not comprobarLetraNIF(tTabla.fieldbyname('dni').AsString) then begin MessageDlg('El NIF introducido no es correcto.', mtWarning, [mbok], 0); txtDNI.SetFocus; end; end; end; |