Cita:
Esta seria la clase:Crea una clase NIF que se usará para mantener DNIs con su correspondiente letra.
Los atributos serán el número de DNI (entero largo) y la letra que le corresponde.
La clase dispondrá de los siguientes métodos:
La letra se calculará con un método auxiliar (privado) de la siguiente forma:
se obtiene el resto de la división entera del número de DNI entre 23 y se usa l
siguiente tabla para obtener la letra que corresponde:
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
Los atributos serán el número de DNI (entero largo) y la letra que le corresponde.
La clase dispondrá de los siguientes métodos:
- Constructor predeterminado que inicialice el nº de DNI a 0 y la letra a espacio en blanco (será un NIF no válido).
- Constructor que reciba el DNI y establezca la letra que le corresponde.
- leer() : que pida el número de DNI (ajustando automáticamente la letra)
- Método que nos permita mostrar el NIF (ocho dígitos, un guión y la letra en mayúscula; por ejemplo: 00395469-F)
La letra se calculará con un método auxiliar (privado) de la siguiente forma:
se obtiene el resto de la división entera del número de DNI entre 23 y se usa l
siguiente tabla para obtener la letra que corresponde:
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
Código PHP:
Ver original
<?php class Nif { private $dni; private $dniLetra; public function __construct($dni=0, $letra="") { if($dni != 0) { $this->dni = $dni; $this->dniLetra = $letra; $this->generarLetra(); } else { echo 'NIF no valido!!'; } } public function leer ($dniNuevo) { $this->dni = $dniNuevo; $this->generarLetra(); } private function generarLetra() { $letra = 'TRWAGMYFPDXBNJZSQVHLCKE'; //Calculo el resto del DNI $resto = $this->dni % 23; //Concateno la letra con el DNI if($resto == $i) { $this->dni .= '-'.$letra[$i].'<br />'; break; } } } public function mostrar () { echo $this->dni; } } $nif = new Nif(11395461); $nif->mostrar(); ?>
Explico un poco la clase Nif posee dos propiedades que son $dni y $dniLetra, despues creo un constructor para que pasen el dni y la letra y ala vez llamo al metodo generarLetra que lo que hace es buscar la posición de un caracter en la cadena $letra. la letras estan ubicadas con la misma posicion del enunciado. Si el resto de la divición de DNI /23 es igual ala posición de la cadena concateno la posición de la letra y paro el bucle. Hasta funciona de diez.
El tema es que cuando me ingresan un DNI ejemplo con 00382036, la propiedad toma solo el 3. Dejo un ejemplo de programación estructurada para que se entienda.
Código PHP:
Ver original
<?php $letra = 'TRWAGMYFPDXBNJZSQVHLCKE'; $dni = 00382036; echo $dni.'<br />'; $resto = $dni % 23; if($resto == $i) { $dni.= '-'.$letra[$i]; break; } } echo 'Cuando sale del bucle '.$dni; ?>
La teoria dice esto:
Cita:
Yo tendria que hacer algo cuando el DNI empieza con 0.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. El módulo 23 es el número entero obtenido como resto de la división entera del número del DNI entre 23. El resultado es un número comprendido entre el 0 y el 22. En base a una tabla conocida se asigna una letra. La combinación del DNI con esa letra es el NIF.
Este mismo algoritmo también puede utilizarse para el cálculo del NIE. En el caso que el NIE empiece por X, se calcula despreciando la X y utilizando los 7 dígitos, si el NIE empieza por Y, se sustituye la letra Y por el número 1, si el NIE empieza por Z, se sustituye la letra Z por el número 2 y se realiza el mismo cálculo.
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, etc.).
Este mismo algoritmo también puede utilizarse para el cálculo del NIE. En el caso que el NIE empiece por X, se calcula despreciando la X y utilizando los 7 dígitos, si el NIE empieza por Y, se sustituye la letra Y por el número 1, si el NIE empieza por Z, se sustituye la letra Z por el número 2 y se realiza el mismo cálculo.
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, etc.).
¡Saludos y muchas gracias desde ya!
Una de las soluciones, pasandole un string al DNI si hace bien el calculo, se le pasamos INT que empiece con 0 ala izquieda el calculo lo hace mal. Es decir solo te toma el siguiente numero despues del 0.