Comprobar y validar DNI / NIF en Prestashop

De wikipedia_IndianWebs
Saltar a: navegación, buscar

Si necesitamos comprobar el DNI / NIF al darse de alta un nuevo usuario o añadir una nueva dirección en Prestashop, debemos añadir una nueva función y modificar algunos controladores, los pasos seria los siguientes:

En el archivo /classes/Validate.php añadir las siguentes funciones:

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);
}

Ahora hay que modificar el fichero /controllers/front/AuthController.php:

buscamos la línea (debería estar en la número 509):

if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))

Y la dejamos así:

if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni')) || !Validate::isDniSpain(Tools::getValue('dni')) ))

Hacemos lo mismo en el archivo /controllers/front/AddressController.php:

buscamos la línea (debería estar en la número 159):

if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))

Y la dejamos así:

if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni')) || !Validate::isDniSpain(Tools::getValue('dni')) ))


Tened en cuenta que esto afectará a todos los países que tengan activado el campo número de identificación activado, si se necesita comprobar en algún país que no sea España se debe modificar la función para que discrimine por países. Solo funciona para los NIF, los CIF no los acepta como válidos.


--Oscar Sánchez Guiu (discusión) 12:17 3 mar 2015 (CET)

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas
Compartir
Categorías
Apps
[×] CSS
[×] Diseño
Google
[×] Joomla
[×] Magento
[×] Mobile
[×] RRHH
[×] YouTube