Cuando pedimos a un usuario que introduzca su NIF en un campo de un formulario, tan importante como guardar ese dato es validar el dato antes de guardarlo, pues no tiene ningún sentido guardar un dato que no es válido y por tanto no vamos a poder usar para cualquiera que sea el cometido para el que le hemos pedido al usuario que nos lo proporcione.
Aunque Gravity Forms no trae de serie un tipo de campo específico para validar el NIF, afortunadamente, pone a nuestra disposición filtros con los que podemos validar cualquier dato introducido en un campo del formulario con nuestra propia función de validación. De esta manera no sólo podemos validar un NIF sino cualquier otro tipo de dato que necesitemos validar.
El acto de validar el NIF en Gravity Forms consistirá de dos partes claramente diferenciadas.
- Obtener el dato que el usuario ha introducido en el formulario y validarlo con nuestra función de validación de NIF.
- Si nuestra función de validación de NIF nos dice que el dato no es válido, se lo haremos saber a Gravity Forms y le proporcionaremos un mensaje de error de validación para el campo.
Función de validación del NIF
Si buscas un poco en Gooogle encontrarás que hay ya muchas funciones creadas para validar un NIF. Para el ejemplo que nos ocupa yo voy a usar esta. Que pertenece a un módulo de validación para Drupal que se encuentra bajo licencia GPL.
Pero tú puedes usar cualquier otra ya sea creada por un tercero o por ti mismo, lo importante es que sea capaz de comprobar correctamente la validez del NIF.
La función de validación del NIF debe devolvernos true o false en base a la validez del NIF introducido. Esta función que voy a usar en el ejemplo sirve tanto para personas físicas nacionales o extranjeras y empresas (por cierto, dato curioso, aunque la gente sigue usando el término CIF cuando se habla del identificador fiscal de una empresa, desde el año 2008 ese término no existe y se utiliza el término NIF tanto para personas físicas como para empresas).
Podemos añadir la función de validación del NIF usando el método clásico del archivo functions.php del theme (sólo si sabes lo que haces), o en un plugin que creemos a tal efecto, o incluso usando algún plugin para agregar fragmentos de código a WordPress. Lo importante es que de una manera u otra tengamos disponible la función de validación de NIF en nuestro WordPress para llamarla desde la función que engancharemos a continuación al filtro de validación de Gravity Forms.
Informando a Gravity Forms cuando el NIF no es válido
Gravity Forms nos proporciona dos filtros que podemos usar para realizar validaciones de datos:
En este caso, puesto que sólo queremos validar un campo del formulario, vamos a usar el primer filtro que está específicamente indicado para validar un único campo (aunque también se puede usar para validar varios campos) y resulta más sencillo de utilizar para los que no tienen demasiado experiencia en programación.
Con el fin, precisamente, de que nuestro código de validación se ejecute únicamente para el campo en cuestión del formulario concreto donde tenemos el campo, vamos a especificar tanto la id del formulario como la id del campo en el nombre del filtro tal como se indica en la documentación. De tal manera que si, por ejemplo, la id del formulario es 1 y la id del campo para el NIF es 3, el nombre del filtro a usar sería gform_field_validation_1_3
La función completa sería quedaría de la siguiente forma:
Por último indicar que el tipo de campo que usaremos en el editor de formularios de Gravity Forms será el campo “Línea de texto“, ya que este campo carece de validación del tipo de dato introducido por parte de Gravity Forms y de esta manera sólo se aplicará nuestra función de validación de NIF.
A mí no me cuentes historias y dámelo hecho (WP way of life…)
Si no te has enterado de nada y le tienes pánico a eso de editar código fuente. No te preocupes, he creado un pequeño plugin que simplemente tienes que descargar el archivo zip desde Github, instalar y activar en tu WordPress como harías con cualquier otro plugin en formato zip.
Una vez activado el plugin cualquier campo de línea de texto al que añadas la clase CSS validar_nif en los ajustes del campo se le aplicará la validación del NIF.
Ahora ya no tienes excusa para no recopilar NIF válidos con Gravity Forms ;)
Gracias por esta contribución.
Muy fácil con “el no me cuentes historias”, funcionando y lo pondré en todos los formularios.
De nada Juan, me alegro de que te haya servido.
Mil gracias, justo lo que estaba buscando y encima nos lo das hecho.
Hola Samuel,
Pedazo artículo! Muy útil.
Aprovecho y te pregunto porque he observado que con tu plugin funciona correctamente pero utilizando Code Snippets no funciona.
¿Hay algo que se me escapa?
Muchas gracias y que tengas buen día.
Hola Nacho, me alegro de que te haya gustado. Sin más detalles que “no funciona” me temo que poco te puedo responder.
Hola Samuel. Gracias por tu plugin .
Dime algo. ¿Es posible que el plugin valide el NIF europeo? Gracias.
@eurico El plugin sólo valida NIF español, para cualquier otro tipo de validación tendrías que cambiar el código que se encarga de la validación.
Hola Samuel,
Funciona de lujo. Gracias por tu aporte.
¿Sabes cómo se podría hacer esta validación con Javascript?
Muchas gracias.
Saludos,
-Nacho.
La validación de los valores de los campos en Gravity Forms se hace siempre al hacer clic en el botón de enviar el formulario, por lo que se hace siempre con PHP. Así que como Gravity Forms no tiene una función de validación basada en JavaScript, no hay filtros específicos para este cometido. Tendrías que elaborar tu propio sistema para la validación con JavaScript, al margen de Gravity Forms, como harías con cualquier otro formulario HTML.
Gracias Samuel! buen aporte!
Me alegro de que te guste David 😉
Gracias Samuel!
He aprovechado lo que has explicado crear un botón de tipo NIF, espero que le pueda servir a alguien más https://github.com/ZhenIT/gravityforms-nif
Genial Mikel, me alegra saber que sigues activo 😉
Muy buenas Samuel,
Muchas gracias por la información, realmente útil. Lo que pasa que entiendo que no es capaz de validar si un DNI es real o no, en el sentido de que haya detrás unos datos reales del ciudadano. Por ejemplo, he visto que da por bueno un DNI generado por esta pagina https://www.generador-de-dni.com/validador-de-dni, y es un DNI que no es realmente real.
Quiero decir ¿no es posible que valide si el DNI es de una persona real o no, no? porque entiendo que para eso tendría que conectar con alguna base de datos oficial
El único que podría dar por “real” un DNI es el estado, y que yo sepa no hay ningún servicio del estado que proporcione la información que buscas. Todo los validadores que conozco se limitan a validar que el formato del dato es correcto.
Muchas Gracias por el aporte Samuel.
Hola Samuel consulta como se puede integrar para validar RUT Chileno
acá esta el código para validar https://gist.github.com/hernanbozan/c2564d8f0d77778b47ee828e80cb9500
Tendrías que sustituir la función isValidIdNumber() de mi ejemplo por la función phpRule_ValidarRut() del enlace que indicas, el resto sería igual.