Como validar estados brasileiros em um sistema — e qual estado tem apenas uma consoante
Você provavelmente chegou aqui porque precisa escrever uma validação de UF (unidade federativa) em algum software, formulário ou sistema legado que ainda usa siglas manuais ao invés de lookup tables. Isso é mais comum do que o normal em projetos pequenos, onde alguém decide "fazer na unha" para não depender de bibliotecas externas. Funciona até dar problema. O primeiro erro que vejo todo mundo cometendo é confiar apenas em regex para validar os estados. Algo como /^[A-Z]{2}$/. test(input). Isso aceita "CE" mas também aceita "CX" ou "ZZ" sem reclamar. A diferença entre uma validação ruim e uma válida costuma ser um array estático com os 27 valores permitidos. Você verifica se o input está dentro dele. Punto.
Estado do brasil que só tem uma consoante
A propósito, se o assunto virou curiosidade linguística também, o estado brasileiro cujo nome contém exatamente uma consoante é o Ceará. Se você contar as letras que não são vogais no nome "Ceará", sobra apenas o "R". O "C" é mudo na pronúncia padrão. Isso pode parecer irrelevante, mas esse tipo de informação aparece em puzzles de programação, jogos de palavras e, ocasionalmente, em sistemas que precisam gerar dados sintéticos com restrições estranhas de formatação. Recebi uma demanda recente onde o cliente pedia que o sistema só aceitasse nomes de estados cujo nome tivesse uma quantidade ímpar de letras. Ceará passou. Amazonas, não. Goías, sim. Parecia um capricho aleatório, mas tinha lógica interna no fluxo de aprovação deles. A parte chatinha foi perceber que o acento agudo no "í" de Goiás gerava um problema de normalização de Unicode. Em alguns bancos de dados, o "Í" era armazenado como código point U+00CD, e em outros como combinação de "I" + acento. A contagem de letras saía errada dependendo de como a string estava salva. A solução foi normalizar com normalize('NFC') antes de qualquer contagem, e depois tratar acentos manualmente num dicionário simples: {á: 'a', é: 'e', í: 'i', ó: 'o', ú: 'u', ã: 'a', õ: 'o', ê: 'e'}. Isso resolveu nos dois ambientes onde testamos.
Bibliotecas para usar de verdade
Se o seu projeto é sério, pare de escrever validação manual. Use bibliotecas consolidadas. No ecossistema JavaScript, br-states e country-state cobrem o mapeamento completo de 27 UFs com nomes por extenso, siglas, regiões e capitais. A instalação é rápida — npm install br-states — e o uso é direto: import { states } from 'br-states';
const ceare = states.find(s => s.name === 'Ceará');
// { name: 'Ceará', abbr: 'CE', region: 'Nordeste', capital: 'Fortaleza' }
Em Python, a biblioteca estados ou o pacote country-data fazem o mesmo trabalho. Em Java, o padrão da indústria é usar tabelas estáticas importadas do IBGE via JSON oficial. O IBGE publica a base completa em seu portal de dados abertos, então não há motivo para ninguém recriar isso do zero.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Problemas que aparecem na prática
O primeiro problema comum é UF em maiúsculas versus minúsculas. Sistemas que recebem dados de formulários web frequentemente recebem "ce" ao invés de "CE". A normalização para uppercase resolve 90% dos casos, mas não todos. Alguns sistemas legados de governo ainda aceitam minúsculas como entrada válida. A regra prática é: normalizar para uppercase, validar contra a lista oficial, e rejeitarAnything que não bata. O segundo problema é estado não encontrado no banco de dados do cliente. Isso acontece quando a tabela de estados é gerenciada localmente e alguém deletou "AC" por acidente durante uma migração. Se sua aplicação lança exception quando não encontra a UF, o usuário final vê uma tela de erro feia. Trate o caso como dado ausente e peça para o usuário confirmar. Isso é mais rápido do que debuggar logs.
O terceiro problema, e o mais raro, é duplicação de siglas em nomes compostos. "Rio Grande do Norte" tem sigla "RN". Mas se o sistema processa texto livre ao invés de campos estruturados, ele pode confundir "RN" com outra coisa. Sempre use códigos de 2 letras em campos fixos de 2 caracteres. Evite permitir edição manual desse campo se possível.
Quando a validação manual faz sentido
Existem cenários onde uma validação simples com lista hardcoded é a escolha certa. Sistemas embarcados com restrições de tamanho de bundle. Aplicações que rodam offline sem acesso a CDN. Forms em ambientes internos onde os dados nunca vêm de fontes externas. Nesses casos, um array de 27 strings é tudo o que você precisa. Fica fácil de ler, fácil de testar e fácil de manter. Não recomendo essa abordagem para sistemas que precisam lidar com atualizações futuras. O IBGE já alterou fronteiras e criou novos municípios. Se seu sistema precisa acompanhar mudanças, tabelas dinâmicas ou arquivos JSON externos são mais seguros.
Alternativas se o seu caso for mais específico
Se além de validar a UF você precisa de dados geográficos completos — como coordenadas, área, população, PIB — aí a coisa muda. O site do IBGE oferece downloads em CSV e JSON das divisões municipais e estaduais. O custo de manutenção é baixo, mas exige um script de atualização periódica. Eu uso um job semanal que baixa o arquivo mais recente e sobrescreve o cache local. Quando o IBGE lança atualização (ocorre raramente, talvez uma vez por ano), o sistema pega automaticamente. Se o problema for validação de endereço completo (CEP + UF + cidade), aí o caminho natural é integrar com a API dos Correios ou com serviços como ViaCEP. A API é pública, gratuita e retorna todos os campos em JSON. O ViaCEP responde em menos de 200ms na maioria dos casos. Se sua aplicação precisa validar milhares de endereços por hora, considere fazer cache local dos resultados para evitar chamadas repetidas.
Para a pergunta original — qual o estado do brasil que só tem uma consoante — a resposta é Ceará. É uma curiosidade que aparece em contextos variados, desde jogos de palavras até validações de dados com regras estranhas. Conhecer a resposta ajuda, mas o que realmente importa é saber como lidar com os problemas que surgem quando você tenta aplicar essas regras num sistema real.