Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal
Resolvi criar esta função para verificar se uma placa está ou não no rodízio de São Paulo.
/**
* Função que verifica se uma placa está no rodízio ou não.
* Pode receber um parâmetro de data, onde será verificado se a placa estará ou não no rodízio naquela data
* Voce DEVE definir o timezone, utilizando a função date_default_timezone_set(), senão será exibido um Warning.
* @author Matias Rezende - www.matiasrezende.com.br
* @license http://creativecommons.org/licenses/by-sa/2.5/br/
* @version 1.0
* @see http://www.cetsp.com.br/internew/informativo/pico/pico.asp
* @param string $placa - a placa a ser verificada, no formato AAA-0000 (maiúsculas ou minúsculas)
* @param string $data - a data a ser verificada, no formato DD/MM/AAAA. Se não for dado, será utilizada a data atual
* @return boolean
*/
function VerificaRodizioSaoPaulo($placa, $data = null) $finalPlaca = substr($placa,-1);
// definimos as placas que estarão no rodízio por dia da semana
$rodizio = array(
// segunda feira
1 => array(1,2),
// terça feira
2 => array(3,4),
// quarta feira
3 => array(5,6),
// quinta feira
4 => array(7,8),
// sexta feira
5 => array(9,0));
// Se for passada a data atual, $diaSemana terá o dia da semana da data passada. Senão, terá o dia da semana atual,
// em formato de 0 a 6, onde 0 é domingo e 6 é sábado
$diaSemana = ($data === null) ? date('w') : date('w',strtotime(implode('-',array_reverse(explode('/',$data)))));
// Verificamos aqui se está definido o array com o índice do dia da semana
if(isset($rodizio[$diaSemana]))
{
return (in_array($finalPlaca,$rodizio[$diaSemana])) ? true : false;
}
// se não estiver, significa que a data passada é sábado, domingo ou uma data inválida.
else
{
return false;
}
}
// se a placa não for válida, envia uma exceção
else
{
throw new InvalidArgumentException('A placa passada não é válida');
}
}
Pode ser verificado se o veículo estava ou estará no rodízio em outra data que não a data atual.
Exemplos de utilização:
// definimos o timezone como sendo São Paulo antes de utilizar a função
date_default_timezone_set('America/Sao_Paulo');
try
{
// sem parâmetro de data
echo (VerificaRodizioSaoPaulo('AAA-1234')) ? 'A placa está no rodízio<br/>': 'A placa não está no rodízio<br/>';
// com parâmetro de data de segunda a sexta
echo (VerificaRodizioSaoPaulo('AAA-1234','01/01/2010')) ? 'A placa está no rodízio<br/>': 'A placa não está no rodízio<br/>';
// com parâmetro de data sábado ou domingo
echo (VerificaRodizioSaoPaulo('AAA-1234','02/01/2010')) ? 'A placa está no rodízio<br/>': 'A placa não está no rodízio<br/>';
// com parâmetro de data inválida
echo (VerificaRodizioSaoPaulo('AAA-1234','30/02/2009')) ? 'A placa está no rodízio': 'A placa não está no rodízio';
} echo $e->getMessage();
}Carlos Eduardo
EDIT - Fiz pequenas modificações no script(tirei o date_default_timezone_set() de dentro da função e tirei o cast do preg_match()). Obrigado ao João Batista Neto pelas observações
legal =] nao sei como funciona isso direito mas parece util :D parabens !
Legal pra caramba.