Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matias Rezende

Verificar se placa está no rodízio de São Paulo

Recommended Posts

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)
{
	// verificamos se a placa está no formato correto, sendo aceito maiúscula ou minúscula
	if(preg_match('^[a-zA-Z]{3}\-[0-9]{4}^',$placa))
	{
		// pegamos o último número da placa
		$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';
}
catch (Exception $e)
{
	echo $e->getMessage();
}

Utilizem a vontade. Só peço que não tirem os créditos.

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.