Jump to content

aenar

Members
  • Posts

    1
  • Joined

  • Last visited

aenar's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. Dándole mil vueltas lo he conseguido, en authcontroller.php cambias isdnilite() por isdni() y en validate.php cambias los return de 1 a true y todos los demás a false, para devolver varias respuestas antes devolvía un integer y necesita un bool. ha de quedar así authcontroller.php if (Country::isNeedDniByCountryId($address->id_country) AND (!Tools::getValue('dni') OR !Validate::isDni(Tools::getValue('dni')))) $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.'); elseif (!Country::isNeedDniByCountryId($address->id_country)) $address->dni = NULL; validate.php public static function isDni($dni) { /* Return code: 1 : It's Ok 0 : Bad format for DNI -1 : DNI duplicate -2 : NIF error -3 : CIF error -4 : NIE error */ Tools::displayAsDeprecated(); if (!$dni) return true; $dni = strtoupper($dni); 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}$)/', $dni)) return false; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `id_address` FROM `'._DB_PREFIX_.'address` WHERE `dni` = \''.pSQL($dni).'\''); if ($result) return false; for ($i=0;$i<9;$i++) $char[$i] = substr($dni, $i, 1); // 12345678T if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $dni)) if ($char[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($dni, 0, 8) % 23, 1)) return true; else return false; $sum = $char[2] + $char[4] + $char[6]; for ($i = 1; $i < 8; $i += 2) $sum += substr((2 * $char[$i]),0,1) + substr((2 * $char[$i]),1,1); $n = 10 - substr($sum, strlen($sum) - 1, 1); if (preg_match('/^[KLM]{1}/', $dni)) if ($char[8] == chr(64 + $n)) return true; else return false; if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $dni)) if ($char[8] == chr(64 + $n) || $char[8] == substr($n, strlen($n) - 1, 1)) return true; else return false; if (preg_match('/^[T]{1}/', $dni)) if ($char[8] == preg_match('/^[T]{1}[A-Z0-9]{8}$/', $dni)) return true; else return false; if (preg_match('/^[XYZ]{1}/', $dni)) if ($char[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $dni), 0, 8) % 23, 1)) return true; else return false; return false; } Espero que te sirva
×
×
  • Create New...