O guia real sobre como lidar com a lista completa de estados brasileiros na prática
A maioria dos projetos que exigem o tratamento dos todos estados brasileiros começa com uma confusão simples: que é só listar os 26 estados mais o Distrito Federal e pronto. Não é. O problema real aparece quando você precisa cruzar siglas, nomes completos, códigos IBGE, regiões geográficas e regras específicas de cada UF — e aí qualquer abordagem improvisada trava. Eu já passei por isso em um sistema de frete que precisava calcular valores diferentes para cada estado, com regras de isenção, tributação diferenciada e limites de peso por região. O ponto de partida sempre foi a lista correta. Se ela já vier errada, todo o resto do projeto herda o erro.
Como montar sua base de todos os estados
A fonte mais confiável continua sendo o IBGE. A tabela oficial contém 27 unidades federativas, cada uma com código numérico de 2 dígitos, sigla e nome completo. A versão mais recente da tabela está disponível no site do instituto, e geralmente é atualizada apenas quando há mudanças territoriais — o que é raro. Aqui está a lista completa, na ordem que eu recomendo usar em qualquer projeto:
| Código IBGE | Sigla | Estado | Região |
|---|---|---|---|
| 11 | RO | Rondônia | Norte |
| 12 | AC | Acre | Norte |
| 13 | AM | Amazonas | Norte |
| 14 | RR | Roraima | Norte |
| 15 | PA | Pará | Norte |
| 16 | AP | Amapá | Norte |
| 17 | TO | Tocantins | Norte |
| 21 | MA | Maranhão | Nordeste |
| 22 | PI | Piauí | Nordeste |
| 23 | CE | Ceará | Nordeste |
| 24 | RN | Rio Grande do Norte | Nordeste |
| 25 | PB | Paraíba | Nordeste |
| 26 | PE | Pernambuco | Nordeste |
| 27 | AL | Alagoas | Nordeste |
| 28 | SE | Sergipe | Nordeste |
| 29 | BA | Bahia | Nordeste |
| 31 | MG | Minas Gerais | Sudeste |
| 32 | ES | Espírito Santo | Sudeste |
| 33 | RJ | Rio de Janeiro | Sudeste |
| 35 | SP | São Paulo | Sudeste |
| 41 | PR | Paraná | Sul |
| 42 | SC | Santa Catarina | Sul |
| 43 | RS | Rio Grande do Sul | Sul |
| 50 | MS | Mato Grosso do Sul | Centro-Oeste |
| 51 | MT | Mato Grosso | Centro-Oeste |
| 52 | GO | Goiás | Centro-Oeste |
| 53 | DF | Distrito Federal | Centro-Oeste |
Percebeu que os números 18, 19, 20, 34, 36-40, 44-49 não aparecem? Isso não é um erro de digitação. Esses códigos foram removidos do IBGE ao longo dos anos com a criação de novos estados e a reorganização territorial. Se você encontrar uma biblioteca ou script que ainda use esses códigos obsoletos, descarte.
O problema que ninguém conta
Em 2022, eu estava configurando um validador de CEP que cruzava dados de estado com município. O banco de dados interno tinha uma entrada duplicada: "UF" como coluna separada e "estado" como outra, e os valores nem sempre batiam. Um cliente de Salvador estava cadastrado como "BA" em uma tabela e "Bahia" em outra. O sistema de frete aplicava alíquotas erradas porque o matching por sigla falhava silenciosamente. A solução foi simples, mas demorada para implementar: padronizar tudo para a sigla de 2 letras como chave primária, manter o nome completo apenas para exibição, e criar uma função de normalização que accepts both formats before any comparison. Você vai precisar fazer algo parecido.
O mesmo vale para o código IBGE. Siglas são úteis para interfaces, mas códigos numéricos são mais seguros para integrações com sistemas governamentais e APIs de terceiros. O Correios, por exemplo, espera códigos IBGE em muitos endpoints. Misturar os dois no mesmo fluxo gera erros difíceis de rastrear.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O que funciona no dia a dia
Para a maioria dos projetos, a abordagem que eu recomendo é ter uma camada de dados centralizada. Um arquivo JSON, uma tabela no banco, ou um módulo interno — não importa o formato — desde que seja a única fonte de verdade. Todo o resto do sistema consome daí. Se você estiver usando Python, a biblioteca estados ou o pacote brasilapi resolvem boa parte do problema de cadastro rápido. Ambos mantêm dados atualizados baseados no IBGE e já incluem códigos, siglas e regiões. Eu uso o BrasilAPI em produção há dois anos sem problemas.
Para Node.js, o pacote brasil faz o mesmo. Não é muito complexo, mas funciona e evita que você reinvente a roda. Se o seu projeto exige validação de CPF, CNPJ ou CEP além dos estados, considere usar a BrasilAPI completa. Ela abrange todos esses campos e retorna dados estruturados consistentes. O custo é uma requisição HTTP adicional, mas para a maioria dos casos isso é insignificante.
Armadilhas comuns
O erro mais frequente é confiar em dados copiados de fóruns ou repositórios antigos sem verificar a data da última atualização. O IBGE alterou o código de algumas cidades e a nomenclatura de algumas regiões em 2017 e 2019. Se a sua base foi feita antes disso, provavelmente está desatualizada. Outro problema: tratar o Distrito Federal como se fosse um estado. Ele tem código próprio (53), não tem municípios no mesmo sentido dos estados, e as regras tributárias são diferentes. Se o seu sistema aplica a mesma lógica para DF e para um estado qualquer, algo vai quebrar em algum momento.
Por fim, evite hardcodar a lista em múltiplos arquivos. Eu vi projetos com a lista de estados espalhada por cinco ou seis módulos diferentes. Quando o IBGE faz uma alteração mínima, você precisa caçar todas as ocorrências manualmente. Coloque tudo em um único lugar e importe onde precisar.
Quando a lista simples não basta
Se você trabalha com logística ou comércio eletrônico, vai precisar ir além dos estados. Regiões aduaneiras, zonas de processamento de dados, e diferenças fiscais entre microregiões podem exigir tabelas muito mais detalhadas. Nesses casos, a solução mais prática é contratar uma API especializada ou comprar uma base de dados atualizada de um fornecedor confiável. Tentar montar tudo internamente consome semanas de trabalho e ainda assim fica desatualizado rapidamente. Para a grande maioria dos projetos — cadastros, formulários, relatórios básicos — a lista de 27 unidades com códigos IBGE é suficiente. O desafio nunca é saber quantos estados existem. O desafio é garantir que toda a equipe e todos os sistemas estejam usando exatamente a mesma versão dos dados.