Validators para placa e renavam Quem estiver precisando validar as placas de veículos inclusive no padrão Mercosul, segue o meu validator: ...
LG
Validators para placa e renavam  
Quem estiver precisando validar as placas de veículos inclusive no padrão Mercosul, segue o meu validator:
<?phpclass TPlacaValidator extends TFieldValidator {    public function validate($label, $placa, $parameters = NULL) {        if (strlen($placa) > 0){            $placa = str_replace(' ', '', $placa);            if (!(preg_match("/^([A-Z]){3}([0-9]){1,1}([A-Z]){1}([0-9]){2}$/i", $placa) || preg_match("/^([A-Z]){3}-([0-9]){1}([A-Z]){1}([0-9]){2}$/i", $placa) || preg_match("/^([A-Z]){3}([0-9]){4}$/i", $placa) || preg_match("/^([A-Z]){3}-([0-9]){4}$/i", $placa))) {                throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");            }        }    }}?>


E esse é para validar RENAVAM.
Esse deu uma trabalheira, espero que seja útil pra mais alguém.

class TRenavamValidator extends TFieldValidator {

public function validate($label, $renavam, $parameters = NULL) {
if (strlen($renavam)> 0){
$renavam = str_replace(' ', '', $renavam);
if (is_numeric($renavam)) {
$renavam = str_pad($renavam, 11, "0", STR_PAD_LEFT);
if (!preg_match("/[0-9]{11}/", $renavam)) {
throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
}
$renavamSemDigito = substr($renavam, 0, 10);
$renavamReversoSemDigito = strrev($renavamSemDigito);
$soma = 0;
$multiplicador = 2;
for ($i = 0; $i < 10; $i++) {
$algarismo = substr($renavamReversoSemDigito, $i, 1);
$soma += $algarismo * $multiplicador;

if ($multiplicador >= 9) {
$multiplicador = 2;
} else {
$multiplicador++;
}
}
$mod11 = $soma % 11;
$ultimoDigitoCalculado = 11 - $mod11;
$ultimoDigitoCalculado = ($ultimoDigitoCalculado >= 10 ? 0 : $ultimoDigitoCalculado);
$digitoRealInformado = substr($renavam, -1);
if ($ultimoDigitoCalculado != $digitoRealInformado) {
throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
}
} else {
throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
}
}
}
}
?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (1)


LG

Ficou feio o de Renavam, faltou o php na frente, segue novamente.
O validator de placas valida com ou sem o traço de separação.

<?phpclass TRenavamValidator extends TFieldValidator {    public function validate($label, $renavam, $parameters = NULL) {        if (strlen($renavam)> 0){            $renavam = str_replace(' ', '', $renavam);            if (is_numeric($renavam)) {                $renavam = str_pad($renavam, 11, "0", STR_PAD_LEFT);                if (!preg_match("/[0-9]{11}/", $renavam)) {                    throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");                }                $renavamSemDigito = substr($renavam, 0, 10);                $renavamReversoSemDigito = strrev($renavamSemDigito);                $soma = 0;                $multiplicador = 2;                for ($i = 0; $i < 10; $i++) {                    $algarismo = substr($renavamReversoSemDigito, $i, 1);                    $soma += $algarismo * $multiplicador;                    if ($multiplicador >= 9) {                        $multiplicador = 2;                    } else {                        $multiplicador++;                    }                }                $mod11 = $soma % 11;                $ultimoDigitoCalculado = 11 - $mod11;                $ultimoDigitoCalculado = ($ultimoDigitoCalculado >= 10 ? 0 : $ultimoDigitoCalculado);                $digitoRealInformado = substr($renavam, -1);                if ($ultimoDigitoCalculado != $digitoRealInformado) {                    throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");                }            } else {                throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");            }        }    }}?>