philipthird Posted December 17, 2015 Share Posted December 17, 2015 Hola a todos!, Tengo dos tiendas prestashop (1.5.4.1 y 1.6.1.1) en las que necesito cambiar el campo de identificación fiscal para que reconozca si el formato DNI/NIE/CIF es correcto y lo valide. Ya que por defecto podrías poner cualquier cosa en ese campo y te lo aceptaba. Hasta ahora sólo he encontrado para la validación de DNI (este que os adjunto funciona) pero no para el resto. Los clientes suelen incluir también el NIE y el CIF por lo que no nos podemos restringir en este sentido. ¿Alguien sabe cómo podríamos solucionarlo? Muchas gracias PD: Muchas gracias al usuari "nadie" por ponerlo, en otro post. Lo adjunto aquí porque el otro topic está bloqueado. 'nadie', on 16 May 2013 - 1:41 PM, said: Fichero: /classes/Validate.phpAñade esto:public static function comprobarDni ($cadena){ //Comprobamos longitud if (strlen($cadena) != 9) return false; //Posibles valores para la letra final $valoresLetra = array( 0 => 'T', 1 => 'R', 2 => 'W', 3 => 'A', 4 => 'G', 5 => 'M', 6 => 'Y', 7 => 'F', 8 => 'P', 9 => 'D', 10 => 'X', 11 => 'B', 12 => 'N', 13 => 'J', 14 => 'Z', 15 => 'S', 16 => 'Q', 17 => 'V', 18 => 'L', 19 => 'H', 20 => 'C', 21 => 'K',22 => 'E' ); //Comprobar si es un DNI if (preg_match('/^[0-9]{8}[A-Z]$/i', $cadena)) { //Comprobar letra if (strtoupper($cadena[strlen($cadena) - 1]) != $valoresLetra[((int) substr($cadena, 0, strlen($cadena) - 1)) % 23]) return false; //Todo fue bien return true; } //Comprobar si es un NIE else if (preg_match('/^[XYZ][0-9]{7}[A-Z]$/i', $cadena)) { //Comprobar letra if (strtoupper($cadena[strlen($cadena) - 1]) != $valoresLetra[((int) substr($cadena, 1, strlen($cadena) - 2)) % 23]) return false; //Todo fue bien return true; } //Cadena no válida return false;}public static function isDniSpain($dni){return empty($dni) || (bool)Validate::comprobarDni($dni);}La funcion:comprobarDniha sido sacada de aquí:http://www.kiwwito.c...dni-nie-espanolDespues, vamos al fichero:/controllers/front/AuthController.phpBuscamos esto:if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))Y lo dejamos asi:if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni')) || !Validate::isDniSpain(Tools::getValue('dni')) ))Atención, aqui lo que hacemos es comprobar si el dni es Español para todos los países.... (Lo ideal seria hacerlo de forma individual por Paises y no de forma general) Añado, que lo de modificar el fichero:/controllers/front/AuthController.phpes para el formulario de registro.Para el formulario de modificar la dirección, es el fichero:/controllers/front/AddressController.phpY se cambia esto:if ($country->isNeedDni() && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))por esto:if ($country->isNeedDni() && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni')) || !Validate::isDniSpain(Tools::getValue('dni')))) Link to comment Share on other sites More sharing options...
Recommended Posts