La letra de tu D.N.I. no se pone al azar.
A cada número del D.N.I. le corresponde una letra según un algoritmo que veremos a continuación.
Se divide el número por 23.
A cada resto se le asocia una letra según la tabla siguiente:
0= t
1= r
2= w
3= a
4= g
5= m
6= y
7= f
8= p
9= d
10= x
11= b
12= n
13= j
14= z
15= s
16= q
17= v
18= h
19= l
20= c
21= k
22= e
Puedes usar para el D.N.I. un número menor o igual que cien millones (100.000.000).
2007-02-24 22:05:54
·
answer #1
·
answered by Anonymous
·
1⤊
0⤋
Algoritmo para obtener la letra del NIF
El número de identificación fiscal (NIF) español es un código único que identifica a todos los ciudadanos españoles a efectos fiscales. Partiendo del tradicional DNI, añade a éste una letra que actúa como elemento verificador.
Algoritmo
La letra del NIF se obtiene a partir de un algoritmo conocido como módulo 23. El algoritmo consiste en aplicar la operación aritmética de módulo 23 al número del DNI (Documento Nacional de Identidad). El resultado es un número comprendido entre el 0 y el 22. En base a una tabla conocida se asignará una letra. La combinación del DNI será el NIF.
Este mismo algoritmo también puede utilizarse para el calculo del NIE, despreciando la X y utilizando los 7 dígitos.
El algoritmo no se aplica para obtener el Código de Identificación Fiscal (CIF), que es el "NIF" propio de las personas jurídicas, pues la letra que tiene no se basa en una fórmula, sino que identifica el tipo de entidad (p.e. B para Sociedades Limitadas; G para Asociaciones sin ánimo de lucro y otros tipos no definidos....).
[editar] Tabla de asignación
0 - T
1 - R
2 - W
3 - A
4 - G
5 - M
6 - Y
7 - F
8 - P
9 - D
10 - X
11 - B
12 - N
13 - J
14 - Z
15 - S
16 - Q
17 - V
18 - H
19 - L
20 - C
21 - K
22 - E
Ejemplos
Algunos ejemplos de la implementación de este algoritmo para distintos lenguajes de programación son:
C
#include
#include
const char letra[] = "TRWAGMYFPDXBNJZSQVHLCKE";
const int kTAM = 8; // numero de cifras para el DNI
int main (int argc, char *argv[])
{
int dni;
if (argc != 2)
printf("Uso: %s \n\n", argv[0]);
else
{
if (strlen(argv[1]) != kTAM)
puts("DNI no valido.");
else
{
dni = atoi (argv[1]);
dni %= 23;
printf("%s-%c\n", argv[1],letra[dni]);
}
}
}
[editar] C++
#include
#include
const char letra[] = "TRWAGMYFPDXBNJZSQVHLCKE";
const int kTAM = 8; // numero de cifras para el DNI
using namespace std;
int main (int argc, char *argv[])
{
int dni;
if (argc != 2)
cout << "uso: " << argv[0] << " \n\n";
else
{
if (strlen(argv[1]) != kTAM)
cout << "DNI no valido.\n\n";
else
{
dni = atoi (argv[1]);
dni %= 23;
cout << argv[1] << "-" << letra[dni] << endl;
}
}
}
Java
public static String NIF_STRING_ASOCIATION = "TRWAGMYFPDXBNJZSQVHLCKET";
/**
* Devuelve un NIF completo a partir de un DNI. Es decir, añade la letra del NIF
* @param dni dni al que se quiere añadir la letra del NIF
* @return NIF completo.
*/
public static String nifFromDni(int dni) {
return String.valueOf(dni) + NIF_STRING_ASOCIATION.charAt(dni % 23);
}
Pascal/Delphi
program dni;
{$APPTYPE CONSOLE}
uses SysUtils;
const letra='TRWAGMYFPDXBNJZSQVHLCKE'; //esta cadena de caracteres corresponde a las letras en orden del dni
var n:string[7];
e:integer;
begin
writeln('Programa que calcula la letra del DNI7741626');
writeln; writeln; writeln; writeln;
write('Introduzca su numero de dni:7741626 ');
readln(n);
writeln; writeln; writeln; writeln; writeln;
write ('su dni es7741626 ',n,letra[((strtoint(n)) mod 23)+1]);
readln;
end.
Perl
$numero = "12345678"; # asignación del número de DNI
sub letra_nif { substr( 'TRWAGMYFPDXBNJZSQVHLCKE', $_[0] % 23, 1) }
print "El NIF del DNI $numero es " . letra_nif($numero) . "\n";
[editar] PHP
$numero = "12345678"; //asignación del número de DNI
function letra_nif($dni) {return substr("TRWAGMYFPDXBNJZSQVHLCKE",$dni%23,1);}
echo 'El NIF del DNI "'.$numero.'" es "'.$numero.letra_nif($numero).'"';
Python
DNI=12345678
calculo=DNI%23
NIF='TRWAGMYFPDXBNJZSQVHLCKE'
print "El NIF del DNI es", NIF[calculo]
[editar] Visual Basic
Private Function NIF(DNI As Long)
NIF = DNI & "-" & Mid$("TRWAGMYFPDXBNJZSQVHLCKE", (DNI Mod 23) + 1, 1)
End Function
[editar] Visual C#
private void tB_nif_TextChanged(object sender, EventArgs e)
{
if (tB_nif.Text.Length == 8)
{
tB_letranif.Text = letra_nif(Convert.ToUInt32(tB_nif.Text));
}
}
public string letra_nif(UInt32 dni)
{
string s_letra = "TRWAGMYFPDXBNJZSQVHLCKE";
dni = dni % 23;
s_letra = s_letra[Convert.ToInt16(dni)].ToString();
return s_letra;
}
Excel
=CONCATENAR(A1;EXTRAE("TRWAGMYFPDXBNJZSQVHLCKE";RESIDUO(A1;23)+1;1))
Siendo A1 la celda de origen del DNI sin letra.
2007-02-24 22:09:05
·
answer #3
·
answered by Trastolillo 7
·
0⤊
0⤋