Skip to content

About

Placa (antiga e Mercosul), RENAVAM e preço FIPE de veículos brasileiros, inclusive pela placa, em R e Python

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

veiculosbr

Dados de veículo brasileiros em R e em Python, com as mesmas funções, os mesmos nomes e os mesmos resultados nas duas linguagens:

  • placa antiga (ABC1234) e Mercosul (ABC1D23): conferir, formatar, converter nos dois sentidos e dizer o estado onde foi emplacada;
  • RENAVAM: conferir o dígito;
  • tabela FIPE: marcas, modelos, anos e preço;
  • FIPE pela placa: o preço estimado a partir da placa, com todos os candidatos quando houver mais de um, cada um com a fonte e o grau de confiança.

O preço pela placa é uma estimativa e pode estar errado. O nome do modelo no cadastro da placa raramente é igual ao da FIPE ("15.190 CRM 4X2" no cadastro, "15-190 E Constellation" e "15-190 E Worker" na FIPE). Por isso o pacote nunca escolhe um sozinho quando há dúvida: devolve todos, e cada resultado diz de onde veio.

De onde vêm os dados

Nada aqui é dado oficial do Senatran, do Detran ou da FIPE consultado direto na fonte. Cada informação vem de um lugar:

Informação Fonte Quando
Faixa de letras de cada estado (placa_uf) Wikipédia em inglês, "Vehicle registration plates of Brazil", que cita o Sinesp/Senatran coletada em 26/10/2026; vem dentro do pacote
Regras de placa e de RENAVAM as regras públicas de formato: Resolução Contran 780/2019 (placa Mercosul) e módulo 11 (RENAVAM) escritas no código
Tabela FIPE (fipe_*) API pública do Parallelum, que repete a tabela de veiculos.fipe.org.br consultada na hora
Veículo pela placa (fipe_por_placa) a página pública de placa do tabelafipebrasil.com; e, só quando pedida, a busca por placa do Parallelum consultada na hora

O cadastro da placa vem de sites que não são oficiais: se estiver errado ou desatualizado lá, vem errado aqui. A tabela de faixas por estado é a de janeiro de 2025; faixa distribuída depois disso dá "desconhecida" até a tabela ser refeita (ferramentas/gerar_tabelas.py). Detalhes e licença em dados/LEIAME.md.

Nada é gravado em disco: o pacote só consulta. A mesma consulta feita de novo enquanto o R ou o Python estiver aberto sai da memória, sem voltar à internet; ao fechar, some.

Boa conduta com os sites

O pacote se identifica (veiculosbr/<versão> e o endereço deste repositório), espera entre duas consultas ao mesmo site (3 segundos no tabelafipebrasil; 1,5 no Parallelum, que aceita até 50 por minuto) e, quando um site recusa (limite de consultas), fica 10 minutos sem consultá-lo. Sites que se protegem com desafio anti-robô (placafipe.com, keplaca.com) não são usados.

É para consulta avulsa, não em massa. O tabelafipebrasil.com limita as consultas de placa por endereço de internet (em 26/10/2026, pouco mais de uma dezena de consultas numa tarde bastou para ele pedir uma pausa de mais de uma hora). O catálogo FIPE do Parallelum dá 500 consultas por dia sem token e 1.000 com o token gratuito; a busca por placa, 5 por mês sem token e 10 com ele, por isso só entra quando pedida.

Instalar

# R (>= 4.1), do CRAN
install.packages("veiculosbr")
# ou a versão em desenvolvimento, do GitHub
remotes::install_github("biuspoly/veiculosbr", subdir = "r")
# Python (>= 3.10), do PyPI
pip install veiculosbr

Usar

library(veiculosbr)

placa_valida(c("ABC-1234", "ABC1D23", "AB12345"))   # TRUE TRUE FALSE
placa_para_mercosul("MUA5678")                      # "MUA5G78"
placa_uf("PIA1B11")                                 # "PI": emplacada no Piauí
renavam_valido("94613459057")                       # TRUE

fipe_preco("caminhoes", "515134-1", 2018)           # o preço de outubro/2026, com a fonte
fipe_precos_da_marca("motos", "80", 2005)           # as 24 motos da Honda de 2005, com o código FIPE

resultado = fipe_por_placa("ABC1D23")
resultado$veiculo      # marca, modelo, ano, cidade... e de qual site veio
resultado$candidatos   # todos os códigos FIPE possíveis, com preço, confiança e semelhança
resultado$avisos       # sempre inclui o aviso de que pode estar errado
resultado$falhas       # o que deu errado em cada fonte (ex.: o site pediu pausa)
import veiculosbr as vb

vb.placa_para_mercosul("MUA5678")          # 'MUA5G78'
vb.placa_uf("PIA1B11")                     # 'PI'
vb.fipe_preco("caminhoes", "515134-1", 2018)
vb.fipe_precos_da_marca("motos", "80", 2005)   # lista de PrecoFipe, um por modelo

resultado = vb.fipe_por_placa("ABC1D23")
for candidato in resultado.candidatos:
    print(candidato.codigo_fipe, candidato.modelo_fipe, candidato.preco, candidato.confianca)
print(resultado.avisos, resultado.falhas)

Pela linha de comando: python -m veiculosbr ABC1D23 mostra tudo o que o pacote sabe da placa.

As funções

Função O que faz
placa_valida, placa_tipo se a placa é válida e se é antiga ou Mercosul
placa_para_mercosul, placa_para_antiga, placa_formatar converter e formatar
placa_uf o estado que recebeu a faixa de letras (onde foi emplacada pela primeira vez)
renavam_valido se o dígito do RENAVAM confere
fipe_marcas, fipe_modelos, fipe_anos, fipe_preco a tabela FIPE pelo catálogo
fipe_precos_da_marca o preço de todos os modelos de uma marca num ano, com o código FIPE de cada um
fipe_candidatos os modelos da FIPE parecidos com uma marca e um modelo, num ano
fipe_por_placa tudo junto: o veículo pela placa e os candidatos FIPE

O código que fipe_modelos devolve é o do modelo no catálogo, não o código FIPE que fipe_anos e fipe_preco pedem. Para o preço de todos os modelos de uma marca, use fipe_precos_da_marca: ela faz uma consulta por modelo (só de caminhão da VW, são 42 em 2018), então leva mais de um minuto numa marca grande e pesa na cota do dia. Não há função para a tabela inteira: seriam dezenas de milhares de consultas.

A confiança de cada candidato

Confiança Quando
alta a fonte da placa indicou um código FIPE só, e ele existe no catálogo no ano-modelo do veículo
media a fonte indicou mais de um código, ou não deu para conferir no catálogo
baixa a fonte não indicou código, e ele veio da busca por nome parecido no catálogo

Na busca por nome parecido entram todos os modelos da marca, naquele ano, que ficam a até 0,15 da nota do melhor (semelhanca, de 0 a 1). Sem o ano-modelo, só com o de fabricação, o pacote procura nos dois anos possíveis (o veículo fabricado em 2017 pode ser modelo 2017 ou 2018).

Variáveis de ambiente

Variável Para quê
VEICULOSBR_FIPE_TOKEN o token gratuito de fipe.api.br: sobe o limite do catálogo de 500 para 1.000 consultas por dia, e o da busca por placa de 5 para 10 por mês
VEICULOSBR_RESPOSTAS_GRAVADAS usada pelos testes: lê as respostas de uma pasta em vez de ir à internet

Como o repositório se organiza

casos/       os casos de teste, em JSON, que R e Python conferem (e as respostas gravadas dos sites)
dados/       a tabela de faixas de placa por estado
ferramentas/ gerar_tabelas.py (refaz dados/ pela Wikipédia) e sincronizar.py (copia dados/, casos/ e o README para os pacotes)
r/           o pacote em R
python/      o pacote em Python
docs/        o plano e a origem do projeto

dados/ e casos/ são a fonte; cada pacote tem a sua cópia. Mudou um deles, rode python ferramentas/sincronizar.py: um teste do Python acusa cópia esquecida.

Testes: cd python && uv run pytest e, no R, R CMD build r seguido de R CMD check --as-cran. Nenhum teste vai à internet nem gasta cota: todos leem casos/respostas/.

Licença

MIT. A tabela de dados/ deriva da Wikipédia (CC BY-SA 4.0): veja dados/LEIAME.md.

About

Placa (antiga e Mercosul), RENAVAM e preço FIPE de veículos brasileiros, inclusive pela placa, em R e Python

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages