Validar DNI en el formulario de Elementor

Validar DNI en el formulario de Elementor

Ya hemos visto como validar los campos del formulario en Elementor, ahora damos un paso mas con la validación del campo de DNI, NIF, NIE y CIF

¿Cuál es el código?

Lo tienes a continuación:

Validación del DNI

Colocando el siguiente código en funtions.php

	// Creamos la Lógica de Validación

		function valida_nif_cif_nie($identidad) {
			$identidad = strtoupper($identidad);
			for ($i = 0; $i < 9; $i ++)
			{
				$num[$i] = substr($identidad, $i, 1);
			}
			//si no tiene un formato valido devuelve error
			if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $identidad))
			{
				return 0;
			}
			//comprobacion de NIFs estandar
			if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $identidad))
			{
				if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($identidad, 0, 8) % 23, 1))
				{
					return 1;
				}
				else
				{
					return -1;
				}
			}
			//algoritmo para comprobacion de codigos tipo CIF
			$suma = $num[2] + $num[4] + $num[6];
			for ($i = 1; $i < 8; $i += 2) {
			$suma += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]), 1, 1);
			}
			 $n = 10 - substr($suma, strlen($suma) - 1, 1); //comprobacion de NIFs especiales (se calculan como CIFs o como NIFs)
			if (preg_match('/^[KLM]{1}/', $identidad)) {
			if ($num[8] == chr(64 + $n) || $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($identidad, 1, 8) % 23, 1)) { return 1; }
			else { return -1; } } //comprobacion de CIFs
			if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $identidad)) {
			if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)) {
			 return 2; }
			else { return -2; }
			}
			//comprobacion de NIEs
			if (preg_match('/^[XYZ]{1}/', $identidad)) {
			if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $identidad), 0, 8) % 23, 1)) {
			return 3;
			 }
			else{ return -3; }
			 } //si todavia no se ha verificado devuelve error return 0;
			} // Esta función permite obtener un campo por ID, si no existe devuelve FALSE
			 function var_elementor_get_field( $id, $record ) { $fields = $record->get_field( [
		'id' => $id,
	] );

	if ( empty( $fields ) ) {
		return false;
	}

	return current( $fields );
}

El script anterior se encarga de verificar que el DNI enviado este bien construido.
Ahora vamos a crear un segundo script que recoja y envié los datos y validaciones del formulario de Elementor.

Ya hemos visto como validar los campos del formulario en Elementor,  y sabemos como crear la función permite obtener un campo por ID, para que todo esto funcione.

Así es que solo añadiré solo la función para validar el campo dni de nuestro formulario.

function var_elementor_forms_validation( $record, $ajax_handler ) {

	//  CUSTOM DNI

	if( $field = var_elementor_get_field( 'dni', $record ) )
	{
		if( $field['required'] == 'yes' ){
			if( empty( trim($field['value']) ) ){ // Verifica si es vacío
				$ajax_handler->add_error( $field['id'], 'Por favor ingresa un DNI, NIF, NIE o CIF.' );
			}
			else{	// Validamos el dni,cif,nie o nif
				$identidad = $field['value'];
				if($identidad != '') {
					if(valida_nif_cif_nie($identidad) == 0 || valida_nif_cif_nie($identidad) == -1 || valida_nif_cif_nie($identidad) == -2 || valida_nif_cif_nie($identidad) == -3){
					$ajax_handler->add_error( $field['id'], 'Por favor ingresa un DNI, NIF, NIE o CIF válido.' );
					}
				}

			}
		}
	}

	// FIN
}

add_action( 'elementor_pro/forms/validation', 'var_elementor_forms_validation', 10, 2 );

Ya tienes la información, ahora, piensa como usarla.