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:
 
  1. <?php
  2. class TPlacaValidator extends TFieldValidator {
  3. public function validate($label, $placa, $parameters = NULL) {
  4. if (strlen($placa) > 0){
  5. $placa = str_replace(' ', '', $placa);
  6. 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))) {
  7. throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
  8. }
  9. }
  10. }
  11. }
  12. ?>


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.

 
  1. <?php
  2. class TRenavamValidator extends TFieldValidator {
  3. public function validate($label, $renavam, $parameters = NULL) {
  4. if (strlen($renavam)> 0){
  5. $renavam = str_replace(' ', '', $renavam);
  6. if (is_numeric($renavam)) {
  7. $renavam = str_pad($renavam, 11, "0", STR_PAD_LEFT);
  8. if (!preg_match("/[0-9]{11}/", $renavam)) {
  9. throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
  10. }
  11. $renavamSemDigito = substr($renavam, 0, 10);
  12. $renavamReversoSemDigito = strrev($renavamSemDigito);
  13. $soma = 0;
  14. $multiplicador = 2;
  15. for ($i = 0; $i < 10; $i++) {
  16. $algarismo = substr($renavamReversoSemDigito, $i, 1);
  17. $soma += $algarismo * $multiplicador;
  18. if ($multiplicador >= 9) {
  19. $multiplicador = 2;
  20. } else {
  21. $multiplicador++;
  22. }
  23. }
  24. $mod11 = $soma % 11;
  25. $ultimoDigitoCalculado = 11 - $mod11;
  26. $ultimoDigitoCalculado = ($ultimoDigitoCalculado >= 10 ? 0 : $ultimoDigitoCalculado);
  27. $digitoRealInformado = substr($renavam, -1);
  28. if ($ultimoDigitoCalculado != $digitoRealInformado) {
  29. throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
  30. }
  31. } else {
  32. throw new Exception("O campo {$label} está incorreto, verifique e tente novamente");
  33. }
  34. }
  35. }
  36. }
  37. ?>