bezwada Posted May 8, 2012 Share Posted May 8, 2012 ¡Hola ¿hay alguna opción para validar el DNI / NIF / NIE el problema es que los clientes están llenando el campo obligatorio comox0000001d, con los números B23232323 son spam. Entonces, ¿hay alguna manera de controlar esto? gracias Link to comment Share on other sites More sharing options...
shacker Posted May 9, 2012 Share Posted May 9, 2012 prestashop solo valida el formato, pero no si es real o no. Para esto deberia haber una aplicacion que conecta con una base de datos, cosa que lo veo complicado Link to comment Share on other sites More sharing options...
E-kipper Posted May 10, 2012 Share Posted May 10, 2012 ¿El módulo "Número de IVA europeo" conecta con una base de datos?. Para sociedades funciona, para DNI no lo sé. Link to comment Share on other sites More sharing options...
nadie Posted May 10, 2012 Share Posted May 10, 2012 ¿El módulo "Número de IVA europeo" conecta con una base de datos?. Para sociedades funciona, para DNI no lo sé. Teóricamente. (Pero comprobar a que persona pertenece lo dudo, ya que por ley no esta permitido, acceder a una base de datos digamos donde tengan almacenados este tipo de datos) Pero recomiendo mirar este tema: http://www.prestasho...cion-de-dnicif/ 1 Link to comment Share on other sites More sharing options...
shacker Posted May 10, 2012 Share Posted May 10, 2012 yo creo que valida el numero como el de una tarjeta de credito, pero no si si existe o no Link to comment Share on other sites More sharing options...
bezwada Posted May 14, 2012 Author Share Posted May 14, 2012 Teóricamente. (Pero comprobar a que persona pertenece lo dudo, ya que por ley no esta permitido, acceder a una base de datos digamos donde tengan almacenados este tipo de datos) http://www.prestasho...cion-de-dnicif/ parce bien... gracias Link to comment Share on other sites More sharing options...
LaVallDesign Posted May 17, 2012 Share Posted May 17, 2012 (edited) Creo que no conecte con una base de datos, a parte que no existe (solo la tiene el ministerio de interior). En España solo se valida que tengo un formato valido, utilizando un algoritmo que calcula la Letra. Yo creo que prestashop no valida ni esto, por lo menos en mi casi. Si estoy equivocado os agradeceria que me lo comentarais. Un saludo. Edited May 17, 2012 by LaVallDissenys.com (see edit history) Link to comment Share on other sites More sharing options...
resplandor2010 Posted May 17, 2012 Share Posted May 17, 2012 Hola: Yo estoy en la misma situación. Me gustaría que prestashop, por lo menos validará la letra que corresponde con el dni. Antiguamente tenía la versión cartium 1.2.5 c7, y si que comprobaba la letra. Ahora, desde que actualicé a la 1.4, no lo comprueba. He buscado por todos los sitios, he hecho algunas modificaciones que he visto, pero no me funciona. Se ponga lo que se ponga en el cuadro dni, lo acepta. ¿Alguien conoce la manera de que funcione la validación del dni? Un saludo Link to comment Share on other sites More sharing options...
gc77 Posted October 25, 2012 Share Posted October 25, 2012 Puedes saber si han puesto bien la letra del dni en cualquier direccion web como esta http://www.calculadni.com/ A mi me gustaria saber como puedo hacer para que aceptase por lo menos 8 numeros y una letra Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 He encontrado el codigo php, pero lo he metido en el authcontroller y no funciona la autenticación. <?php $partes = explode('-', $nif); $numeros = $partes[0]; $letra = strtoupper($partes[1]); if (substr("TRWAGMYFPDXBNJZSQVHLCKE",$numeros%23,1) == $letra) echo '<p>El DNI: '.$nif.' es correcto!</p>'; else echo '<p>La letra introducida no es corrrecta!</p>'; ?> No se, haber si algun experto nos ilumina Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted May 16, 2013 Share Posted May 16, 2013 He encontrado el codigo php, pero lo he metido en el authcontroller y no funciona la autenticación. <?php $partes = explode('-', $nif); $numeros = $partes[0]; $letra = strtoupper($partes[1]); if (substr("TRWAGMYFPDXBNJZSQVHLCKE",$numeros%23,1) == $letra) echo '<p>El DNI: '.$nif.' es correcto!</p>'; else echo '<p>La letra introducida no es corrrecta!</p>'; ?> No se, haber si algun experto nos ilumina Eso ya lo hace prestashop con la funcion: Validate::isDni Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted May 16, 2013 Share Posted May 16, 2013 Eso ya lo hace prestashop con la funcion: Validate::isDni nah, no lo hace, simplemente comprueba otra cosa. De todos modos, si tu metes esa validacion que dices, se lo estaras aplicando a todos los paises. ¿Estas seguro de eso? Link to comment Share on other sites More sharing options...
nadie Posted May 16, 2013 Share Posted May 16, 2013 He encontrado el codigo php, pero lo he metido en el authcontroller y no funciona la autenticación. <!--?php $partes = explode('-', $nif); $numeros = $partes[0]; $letra = strtoupper($partes[1]); if (substr("TRWAGMYFPDXBNJZSQVHLCKE",$numeros%23,1) == $letra) echo '<p-->El DNI: '.$nif.' es correcto!<p></p>'; else echo '<p>La letra introducida no es corrrecta!</p>'; ?> No se, haber si algun experto nos ilumina Fichero: /classes/Validate.php Añ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: comprobarDni ha sido sacada de aquí: http://www.kiwwito.c...dni-nie-espanol Despues, vamos al fichero: /controllers/front/AuthController.php Buscamos 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) Link to comment Share on other sites More sharing options...
nadie Posted May 16, 2013 Share Posted May 16, 2013 He actualizado mi mensaje, que no se que le pasa al foro, que va como quiere y cambia caracteres el solo xD. Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 Hola nadie, gracias por tu respuesta, he cambiado lo que me dices, pero sigue tragandose lo que le pongas en el campo de dni. Yo no tengo la carpeta front dentro de controller, he cambiado eso que me dices en /controllers/authcontroller.php Un saludo, yo no acepto pedidos de fuera del pais. (Todavía) Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted May 16, 2013 Share Posted May 16, 2013 ¿Pero no existe el modulo "Numero de iva Europeo" para esto? Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 no lo se, voy a buscarlo a ver que hace Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 Lo acabo de probar Bubalcaba y no hace nada en el dni. me deja registrarme con el dni er4k4 por ejemplo Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted May 16, 2013 Share Posted May 16, 2013 Lo acabo de probar Bubalcaba y no hace nada en el dni. me deja registrarme con el dni er4k4 por ejemplo Acabo de probar lo que decia Nadie arriba, el codigo ese que ha puesto, y me funciona, pero yo uso Prestashop 1.5, que version de prestashop usas tu ¿? Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 Mi versión es la 1.4.9 Tu tienes la carpeta /controllers/front/ porque yo he cambiado la linea en el archivo /controllers/Authcontroller.php en vez de /controllers/front/AuthController.php Link to comment Share on other sites More sharing options...
nadie Posted May 16, 2013 Share Posted May 16, 2013 Fichero: /classes/Validate.php Añ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: comprobarDni ha sido sacada de aquí: http://www.kiwwito.c...dni-nie-espanol Despues, vamos al fichero: /controllers/front/AuthController.php Buscamos 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.php es para el formulario de registro. Para el formulario de modificar la dirección, es el fichero: /controllers/front/AddressController.php Y 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...
nadie Posted May 16, 2013 Share Posted May 16, 2013 (He actualizado mi ultimo mensaje) Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 Esto último si me funciona, pero en el formulario de registro, (que es donde más me interesa no) Seguro que es culpa mia y hago algo mal pero no se que puede ser. He probado creando la carpeta front y sin crearla Link to comment Share on other sites More sharing options...
Miguel Almazan Barrero Posted May 16, 2013 Share Posted May 16, 2013 ya funciona, muchas gracias, pero me fastidia que no he averiguado cual era el error, supongo que de sintaxis (algun espacio o algo por el estilo) he dejado solo en el if la nueva función y funcionaba y he ido agregando las otras una a una y ahora si funciona!!! De nuevo muchas gracias Link to comment Share on other sites More sharing options...
nadie Posted May 16, 2013 Share Posted May 16, 2013 ya funciona, muchas gracias, pero me fastidia que no he averiguado cual era el error, supongo que de sintaxis (algun espacio o algo por el estilo) he dejado solo en el if la nueva función y funcionaba y he ido agregando las otras una a una y ahora si funciona!!! De nuevo muchas gracias Bueno...., me alegro de que al final te funcionara. PD: Es posible que el foro haya dejado un espacio de mas accidentalmente.. Link to comment Share on other sites More sharing options...
Recommended Posts