Jump to content

Validar Nie (Dni/ Dni Extranjeros / Cif)


philipthird

Recommended Posts

Hola a todos,

En nuestra web, cuando se registran nuevos clientes para comprar en nuestra tienda, en authentication.tpl el dni valida lo que escribas en el campo "Número de identificación fiscal". Quería limitar este aspecto al NIE (DNI/ DNI extranjeros y CIF).

Pongo en el input el siguiente pattern. Me funciona perfectamente, en pruebas de validación pero no en el entorno Prestashop. ¿A qué pude ser debido?La verdad es que me estoy volviendo loco intentando encontrar la solución.

<fieldset class="account_creation dni">
		<h3>{l s='Tax identification'}</h3>
		<p class="required text">
			<label for="dni">{l s='Identification number'} <sup>*</sup></label>
			<input type="text" class="text" name="dni" id="dni" title="Introduzca un DNI/NIE/CIF válido con números y letra" pattern="(([X-Z]{1})([-]?)(\d{7})([-]?)([A-Z]{1}))|((\d{8})([-]?)([A-Z]{1}))|(([X-Z])([-]?)(\d{8}))" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{/if}">	
		</p>
	</fieldset>

Uso PrestaShop 1.5.4 y el tema warehouse.

 

Cualquier ayuda es bienvenida! gracias!

 

Link to comment
Share on other sites

Prestashop incluye  sus propias classes de validacion por ejemplo para el DNI viene asi

<div class="required form-group dni_invoice">
<label for="dni">{l s='Identification number'} <sup>*</sup></label>
<input type="text" class="text form-control validate" name="dni_invoice" id="dni_invoice" data-validate="isDniLite" value="{if isset($guestInformations) && isset($guestInformations.dni_invoice) && $guestInformations.dni_invoice}{$guestInformations.dni_invoice}{/if}" />
<span class="form_info">{l s='DNI / NIF / NIE'}</span></div>

Para editar esa validacion seria desde

\classes\Validate.php

Funcion

 public static function isDniLite($dni)
Link to comment
Share on other sites

Hola Ventura!

Lo primero de todo, gracias por contestar.

Me imagino que para cambiar esa validación y que aparte de DNI que viene por defecto, me acepte también el DNI extranjero y el CIF, tengo que cambiar la linea:

return empty($dni) || (bool)preg_match('/^[0-9A-Za-z-.]{1,16}$/U', $dni);

y meter lo que había puesto en el input, el pattern="(([X-Z]{1})([-]?)(\d{7})([-]?)([A-Z]{1}))|((\d{8})([-]?)([A-Z]{1}))|(([X-Z])([-]?)(\d{8}))"

pero no se como hacerlo en Js.

 

Muchas gracias.

Link to comment
Share on other sites

Hola Ventura,

Lo he puesto como dices, pero sigue sin aceptarme la validación: me sale una alerta que dice que el dni no es válido y que el número de identificación fiscal es incorrecto o ya ha sido utilizado.

He probado a meterlo sin ^  y sin las () pero también me da error igualmente.

¿En qué puedo estar fallando?


 

public static function isDniLite($dni)
    {
        
    return empty($dni) || (bool)preg_match('^([X-Z]{1})([-]?)(\d{7})([-]?)([A-Z]{1})|(\d{8})([-]?)([A-Z]{1})|([A-Z])([-]?)(\d{8})', $dni);
    }

    /**
     * Check if $data is a PrestaShop cookie object
     *
     * @param mixed $data to validate
     * @return bool
     */

Link to comment
Share on other sites

No tengo ese archivo, (validate.js). Creo que está sólo en Prestashop 1.6 y yo uso 1.5.4.

 

¿Puede ser que el código después del preg_match que estoy introduciendo no está correctamente escrito?

 

> (bool)preg_match('^([X-Z]{1})([-]?)(\d{7})([-]?)([A-Z]{1})|(\d{8})([-]?)([A-Z]{1})|([A-Z])([-]?)(\d{8})', $dni);

 

La función completa:

public static function isDniLite($dni)
    {
        
    return empty($dni) || (bool)preg_match('^([X-Z]{1})([-]?)(\d{7})([-]?)([A-Z]{1})|(\d{8})([-]?)([A-Z]{1})|([A-Z])([-]?)(\d{8})', $dni);
    }

    /**
     * Check if $data is a PrestaShop cookie object
     *
     * @param mixed $data to validate
     * @return bool
     */

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...