NIF, DNI o NIE obligatorio y validado en PrestaShop

En Tiendaprest nos gusta desarrollar tiendas online en PrestaShop, porque es una plataforma muy completa y preparada para el comercio electrónico, y además, es sencilla de utilizar.

Si tu problema es en una tienda online WordPress, mira esta otra entrada: Cómo poner el campo de DNI obligatorio en WooCommerce

Una de las muchas características que ofrece PrestaShop es que nos permite, en un par de clics, hacer que el campo NIF, DNI o NIE sea obligatorio en la dirección de facturación, dependiendo de la configuración que establezcamos en cada país desde el backoffice o gestor de la tienda:

Desde Internacional > Ubicaciones geográficas > Países podemos gestionar los países y ubicaciones geográficas en los que vende nuestra tienda online y dentro de cada ficha de país podemos establecer si el campo número de identificación fiscal es obligatorio o no marcando en SI o NO el campo: ¿Necesita un número de identificación fiscal?

Configuración de PrestaShop: Internacional > Ubicaciones geográficas > Países. ¿Necesita un número de identificación fiscal?

Si marcamos este campo como obligatorio, PrestaShop, por defecto, simplemente comprueba que no esté en blanco y que además tenga una longitud entre 2 y 16 caracteres entre letras y números. Para ampliar esta información puedes echar un vistazo a la documentación oficial de PrestaShop.

Pero además de esto, lo ideal es que también podamos comprobar que el formato introducido para ese NIF, DNI o NIE, sea válido. Y para esto, os facilitamos el siguiente fragmento de código que hay que insertar como un override de classes/Validate.php

class Validate extends ValidateCore
{
     
    public static function isDniLite($dni)
    {
        if (!Validate::validDniCifNie($dni)) {
          return false;
        }
        return empty($dni) || (bool) preg_match('/^[0-9A-Za-z-.]{1,16}$/U', $dni);
    }
    public static function validDniCifNie($dni){
      $cif = strtoupper($dni);
      for ($i = 0; $i < 9; $i ++){
        $num[$i] = substr($cif, $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}$)/', $cif)){
        return false;
      }
      // Comprobacion de NIFs estandar
      if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $cif)){
        if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 0, 8) % 23, 1)){
          return true;
        }else{
          return false;
        }
      }
      // Algoritmo para comprobacion de codigos tipo CIF
      $suma = $num[2] + $num[4] + $num[6];
      for ($i = 1; $i < 8; $i += 2){
        $suma += (int)substr((2 * $num[$i]),0,1) + (int)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}/', $cif)){
        if ($num[8] == chr(64 + $n) || $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 1, 8) % 23, 1)){
          return true;
        }else{
          return false;
        }
      }
      // Comprobacion de CIFs
      if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $cif)){
        if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)){
          return true;
        }else{
          return false;
        }
      }
      // Comprobacion de NIEs
      // T
      if (preg_match('/^[T]{1}/', $cif)){
        if ($num[8] == preg_match('/^[T]{1}[A-Z0-9]{8}$/', $cif)){
          return true;
        }else{
          return false;
        }
      }
      // XYZ
      if (preg_match('/^[XYZ]{1}/', $cif)){
        if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $cif), 0, 8) % 23, 1)){
          return true;
        }else{
          return false;
        }
      }
      // Si todavía no se ha verificado devuelve error
      return false;
    }
}

Si necesitas ayuda para insertar un override en PrestaShop, puedes echar un vistazo a nuestra entrada Como hacer un override en PrestaShop o también puedes contar con nuestro servicio de soporte especializado PrestaShop.

Esperamos que esta entrada os sea de utilidad.

Con esto y más ¡tu tienda online siempre preparada!

Te puede interesar

  • Entrada

    NIF, DNI o NIE obligatorio y validado en WooCommerce

    Haz que tus pedidos WooCommerce cumplan con los requisitos de facturación, añadiendo el campo NIF, DNI o NIE obligatorio y con un formato válido en tus facturas

    Seguir leyendo

  • Entrada

    Como hacer un override en PrestaShop

    En ocasiones nos toca modificar archivos nativos de PrestaShop porque necesitamos funcionalidades a medida o porque somos capaces de resolver algún pequeño bug que hemos encontrado en el sistema. El problema es que al realizar estas modificaciones directamente tocamos el Core de PrestaShop, algo que es totalmente desaconsejado y que, además, si actualizamos PrestaShop perdemos …

    Seguir leyendo

  • Entrada

    Adaptamos tu tienda a TicketBAI

    Adapta tu facturación a TicketBAI gracias a nuestro conector. Podrás enviar tus facturas a la Hacienda correspondiente y así cumplir con la nueva ley, que es obligatoria, con plazos que comienzan en enero de 2022.

    Seguir leyendo

¿Necesitas ayuda más avanzada para solucionar tus problemas?

Contáctanos o echa un vistazo a nuestros servicios, entre los cuales podrás encontrar varios planes de mantenimiento de Prestahop.

Nuestros servicios

Impulsa la venta online y haz crecer tu negocio en poco tiempo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *