Autor Tema: averiguar dni con javascript calcular la letra del dni algoritmo para determinar  (Leído 6057 veces)

miguelito

  • Visitante
Hola, tengo este código y introduciendo el numero necesito averiguar la letra. y ademas lo que necesito ahora es  En primer lugar (y en una sola instrucción) comprueba si el número es menor que 0 o mayor que 99999999.

1-Si ese es el caso, mostrar un mensaje al usuario indicando que el número proporcionado no es válido y el programa no muestra más mensajes.

2- Si el número es válido, calcula la letra que le corresponde según el método explicado anteriormente.

3- Una vez calculada la letra, se debe comparar con la letra indicada por el usuario. Si no coinciden, se muestra un mensaje al usuario diciéndole que la letra que ha indicado no es correcta. En otro caso, se muestra un mensaje indicando que el número y la letra de DNI son correctos.

Haz clic dentro de la caja de texto y escribe tu respuesta.

Esto es lo que tengo

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">

<head>
    <!--<link rel="stylesheet" href="estilos.css">  weto es para añadir estilos css al documento html-->
    <meta charset="UTF-8">
    <title>experimentoDNI</title>
    <script>
        function averigua() {
            cadena = "TRWAGMYFPDXBNJZSQVHLCKET"
            posicion = formulario.dni.value % 23
            letra = cadena.substring(posicion, posicion + 1)
            document.formulario.dni.value = formulario.dni.value + " - " + letra
        }

    </script>

</head>

<body>



    <form name="formulario">

        <input type="text" name="dni" maxlenght="11" size="11">
        <input type="button" value="OK" language "JavaScript" onclick="averigua()">
    </form>
</body>

</html>
« Última modificación: 14 de Junio 2017, 19:13 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2661
    • Ver Perfil
Buenas, puedes guiarte por el siguiente ejemplo de cómo se calcula la letra del dni usando JavaScript:

Código: [Seleccionar]
function nif(dni) {
  var numero
  var letr
  var letra
  var expresion_regular_dni
 
  expresion_regular_dni = /^\d{8}[a-zA-Z]$/;
 
  if(expresion_regular_dni.test (dni) == true){
     numero = dni.substr(0,dni.length-1);
     letr = dni.substr(dni.length-1,1);
     numero = numero % 23;
     letra='TRWAGMYFPDXBNJZSQVHLCKET';
     letra=letra.substring(numero,numero+1);
    if (letra!=letr.toUpperCase()) {
       alert('Dni erroneo, la letra del NIF no se corresponde');
     }else{
       alert('Dni correcto');
     }
  }else{
     alert('Dni erroneo, formato no válido');
   }
}

La explicación es esta:

La letra se calcula cogiendo todas las letras, excepto la Ñ, la I y la O porque pueden inducir a errores, en un orden concreto (que no es el orden alfabético lógico, sino este ‘TRWAGMYFPDXBNJZSQVHLCKET’) y seleccionando la que coincide en la posición igual al resto de dividir el número del dni entre 23

1º La función recibe una variable con el DNI como string.

2º Tras definir las variables creamos una expresión regular que valida si el DNI está compuesto por 8 letras y un caracter, ya sea en mayúscula o minúscula.

3º Extraemos el número del DNI (es decir, un substring con la longitud del DNI entero menos una letra) y la letra (un substring de un solo caracter que empieza en la posición de la longitud total menos uno).

4º Hacemos la operación de módulo entre el número extraído y 23, reutilizando la variable número para almacenar el resultado. Hacemos esto porque lo necesitamos para calcular si la letra del NIF es válida.

5º Creamos una string con las letras del abecedario ( sin la ñ) en ese orden que se pone arriba.

6º Cogemos un substring de un solo caracter de esa cadena de letras que empiece en la posición marcada por el número que conseguimos en el punto cuatro al hacer la operación de módulo, reutilizando la variable módulo.

7º Comprobamos que la letra cogida de la cadena de letras sea igual a la letra cogida del DNI. Si se cumple la condición sacamos un aviso de que es correcto y si no sacamos el de error.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".