Foros del Web » Programando para Internet » Javascript »

Validar dni en formulario

Estas en el tema de Validar dni en formulario en el foro de Javascript en Foros del Web. No sé si este es el foro correcto: Hola, he construido un formulario que contiene Nombre Apellidos y DNI. Código: <form method="post" name="form1" action="<?php echo ...
  #1 (permalink)  
Antiguo 22/03/2006, 09:08
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Validar dni en formulario

No sé si este es el foro correcto:

Hola, he construido un formulario que contiene Nombre Apellidos y DNI.
Código:
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">NOMBRE:</td>
      <td><input type="text" name="NOMBRE" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">APELLIDOS:</td>
      <td><input type="text" name="APELLIDOS" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">DNI:</td>
      <td><input type="text" name="DNI" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Firmar"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form1">
</form>
Los datos introducidos pasan a una Base de datos mysql que he creado.
Lo que quiero es que si alguien mete un dni incorrectamente salga una pantallita indicando que vuelva a meter el correcto.
He conseguido un script que valida dni o nif:
Código:
<script>
/*******************************
 Validación del nif. Por Carlitos. [email protected]
 Si usas este script, deja intactas estas líneas (créditos). Vale?
 También te agradecería un e-mail con tus comentarios.
*******************************/

function validar()
{
abc=document.formulario.nif.value
dni=abc.substring(0,abc.length-1)
let=abc.charAt(abc.length-1)
if (!isNaN(let))
 {
  alert('Falta la letra')
  document.formulario.nif.focus()
  return false
 }
else
 {
  cadena="TRWAGMYFPDXBNJZSQVHLCKET"
  posicion = dni % 23
  letra = cadena.substring(posicion,posicion+1)
  if (letra!=let.toUpperCase())
   {
    alert("Nif no válido")
    document.formulario.nif.focus()
    return false
   }
 }
alert("Nif válido")
}

</script>
pero no sé como hacer que funcione con mi formulario cuando pulsas firmar.

Otra duda es la siguiente:
He visto que para evitar que programas robot cumplimenten el formulario se emplea un código numérico en formato imagen que el interesado ha de teclear antes de enviar los datos. ¿Cómo podría crear uno para mi formulario?

Gracias por la ayuda y un saludo
  #2 (permalink)  
Antiguo 22/03/2006, 10:08
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
ese formato de imágen se hace a través de una base de datos que tiene todos los códigos y las imágens y va checkeando que coinsidan las imágenes y lo que tu tecléas...Es un tanto complejo...No se si sabes programar del lado del servidor...

En tu script en vez de colocar alert("nif válido") podrías poner document.formulario.submit() para que envíe el formulario...A eso te referías ?

Espero que te sirva

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 22/03/2006, 15:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola de nuevo monoswim:

He modificado un poco el codigo y he puesto la linea que me digiste, pero no consigo que funcione bien. El caso es que ahora inserta los registros en la base de datos pero lo hace aunque el dni este mal. Funciona la parte en la sale una pantallita que me pide que la letra del dni, pero no funciona la parte que dice "dni inválido". Por tanto si meto un dni inválido inserta el registro igualmente. Además cuando sale la pantalla de "Falta la letra" y calco en ella, también inserta los registros.

Te dejo el código a ver si ves como puedo resolverlo:

Código:
<script>
function validar()
{
abc=document.form1.DNI.value
dni=abc.substring(0,abc.length-1)
let=abc.charAt(abc.length-1)
if (!isNaN(let))
{
alert('Falta la letra')
document.form1.DNI.focus()
return false
}
else
{
cadena="TRWAGMYFPDXBNJZSQVHLCKET"
posicion = DNI % 23
letra = cadena.substring(posicion,posicion+1)
if (letra!=let.toUpperCase())
{
alert("Nif no válido")
document.form1.DNI.focus()
return false
}
}
document.form1.submit() 
}
</script>
Código HTML:
</head>

<body>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Id:</td>
      <td><input type="text" name="Id" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Nombre:</td>
      <td><input type="text" name="Nombre" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Apellidos:</td>
      <td><input type="text" name="Apellidos" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">DNI:</td>
      <td><input type="text" name="DNI" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Localidad:</td>
      <td><input type="text" name="Localidad" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Provincia:</td>
      <td><input type="text" name="Provincia" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Validar" onclick="validar()"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form1">
</form>
<p><br />
</p>
</body>
</html> 
Código PHP:
<?php
mysql_free_result
($listado_firmas);
?>
Muchas gracias amigo
  #4 (permalink)  
Antiguo 23/03/2006, 02:24
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola raulo460

Prueba poniendo así el formulario:
Código:
<form method="post" name="form1" action="<?php echo $editFormAction; ?>" onsubmit = "return validar()">
Saludos,
  #5 (permalink)  
Antiguo 23/03/2006, 06:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola Javier, el arreglo ha solucionado el problema que surgia cuando sale la pantalla de "falta letra dni" y a continuación insertaba el registro automaticamente aunque faltase la letra.
Pero sigue sin funcionar la parte en la que en teoría debería salir "dni inválido" cuando se mete mal un dni. Ese aviso no sale y directamente inserta el registro.

¿Porque?
Gracias
  #6 (permalink)  
Antiguo 23/03/2006, 06:59
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

He probado el código y me funciona bien, sale el mensaje de "Nif no válido"

Saludos,
  #7 (permalink)  
Antiguo 23/03/2006, 07:29
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Pues por más que lo intento no lo consigo.
¿Que código estás utilizando, el del primer mensaje?
¿Puedes ponerlo aqui?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.