bateCarimbo.
Documentos

Região fiscal do CPF: o que o 9º dígito revela sobre o estado

O nono dígito do CPF indica a região fiscal em que o documento foi emitido. Veja a tabela das dez regiões fiscais da Receita Federal, como ler o dígito em código e por que ele não prova o estado de nascimento nem o domicílio da pessoa.

Por · Publicado em · Revisado em · 9 min de leitura

O CPF carrega um único dado legível a olho nu: o nono dígito indica a região fiscalda Receita Federal responsável pela inscrição. É o que permite gerar um CPF fictício “de um estado”, e é também a informação do documento mais usada fora do lugar — porque região fiscal de emissão e estado da pessoa são coisas diferentes, e ninguém percebe isso até o relatório sair errado.

Onde fica o dígito da região

São onze algarismos: oito de número-base sequencial, o nono com a região fiscal e os dois últimos de verificação. A contagem é da esquerda para a direita, sobre os dígitos sem máscara — em 123.456.789-09 o nono dígito é o 9, o último antes do hífen, correspondente à 9ª região fiscal (Paraná e Santa Catarina). Com máscara, esse caractere está na posição 11 da string, o que já rendeu muito cpf[8] aplicado ao texto formatado e lendo um ponto em vez de um algarismo.

O dígito da região não é um campo separado pendurado no número: ele entra no cálculo dos dois verificadores como qualquer outro. Trocá-lo para “converter” um CPF de estado invalida o documento, a menos que os dois DVs sejam recalculados pelo módulo 11.

As dez regiões fiscais

A Receita divide o país em dez regiões fiscais. Nove usam o dígito homônimo e a décima usa o 0 — a exceção que costuma faltar nos mapas escritos às pressas.

Dígito na nona posição do CPF, região fiscal correspondente e o que ele permite (ou não) concluir.
DígitoRFEstadosObservação
11ªDF, GO, MS, MT e TOCinco UFs; a única região que inclui o Distrito Federal.
22ªAC, AM, AP, PA, RO e RRSeis UFs — o dígito que menos restringe o estado.
33ªCE, MA e PITrês UFs do Nordeste.
44ªAL, PB, PE e RNQuatro UFs do Nordeste oriental.
55ªBA e SEDuas UFs, separadas do restante do Nordeste.
66ªMGUF única: o dígito 6 só sai em Minas Gerais.
77ªES e RJDuas UFs do Sudeste, sem SP e sem MG.
88ªSPUF única; como concentra a maior população do país, tende a ser o dígito mais frequente em bases reais.
99ªPR e SCDuas UFs do Sul; o RS fica de fora, na 10ª.
010ªRSUF única e o único dígito que não coincide com o número da região.

Repare na assimetria: só três dígitos — 6, 8 e 0 — apontam para uma UF única. Nos outros sete, o número devolve um conjunto de dois a seis estados, e não existe desempate possível dentro do próprio CPF. Qualquer código que transforme dígito em sigla de estado está escolhendo um elemento arbitrário desse conjunto.

Lendo o dígito em código

A leitura é barata: normalizar, conferir o tamanho e indexar. O que vale decidir com cuidado é o formato do retorno — devolver uma UF única mentiria em sete dos dez casos, então a função entrega a região inteira e deixa a ambiguidade visível para quem chama.

TypeScript
const REGIOES = [
  { digito: "1", regiao: "1ª", ufs: ["DF", "GO", "MS", "MT", "TO"] },
  { digito: "2", regiao: "2ª", ufs: ["AC", "AM", "AP", "PA", "RO", "RR"] },
  { digito: "3", regiao: "3ª", ufs: ["CE", "MA", "PI"] },
  { digito: "4", regiao: "4ª", ufs: ["AL", "PB", "PE", "RN"] },
  { digito: "5", regiao: "5ª", ufs: ["BA", "SE"] },
  { digito: "6", regiao: "6ª", ufs: ["MG"] },
  { digito: "7", regiao: "7ª", ufs: ["ES", "RJ"] },
  { digito: "8", regiao: "8ª", ufs: ["SP"] },
  { digito: "9", regiao: "9ª", ufs: ["PR", "SC"] },
  { digito: "0", regiao: "10ª", ufs: ["RS"] },
] as const;

export type RegiaoFiscal = (typeof REGIOES)[number];

/**
 * Lê a região fiscal de um CPF já validado.
 * Retorna null quando a entrada não tem 11 dígitos — e nunca "adivinha" a UF:
 * quem consome o resultado recebe a lista inteira de estados da região.
 */
export function regiaoFiscal(cpf: string): RegiaoFiscal | null {
  const digitos = cpf.replace(/\D/g, "");
  if (digitos.length !== 11) return null;

  return REGIOES.find((regiao) => regiao.digito === digitos[8]) ?? null;
}
Leia a região só depois de validar o CPF: em um número inválido, o nono dígito é apenas um algarismo qualquer.

Duas armadilhas ficam de fora dessa função de propósito. Ela não valida os dígitos verificadores, porque validação e interpretação são responsabilidades distintas; e não rejeita sequências repetidas como 111.111.111-11, que passam no módulo 11 e devolveriam alegremente a 1ª região fiscal.

CPF emitido no exterior

Brasileiros que moram fora e estrangeiros que precisam de CPF para abrir conta, comprar imóvel ou receber rendimentos no Brasil também se inscrevem — pela rede consular ou pelos canais eletrônicos da Receita. O número que sai é um CPF comum, de onze dígitos, com nono dígito dentro da mesma tabela de dez regiões.

E é justamente aí que a interpretação geográfica desmorona. O CPF não tem código de exterior. O título de eleitor tem: seus dígitos de UF reservam o valor 28 para ZZ, o exterior. No CPF, a inscrição feita de fora do país recebe o dígito da unidade que a processou, e nada no número diz que a pessoa não mora no Brasil. Um cadastro que exige UF brasileira coerente com a região fiscal rejeita esses usuários por definição, sem log que explique o porquê.

O que muda com o CPF como número único de identificação

Desde a Lei nº 14.534/2023, o CPF é o número suficiente e único de identificação do cidadão nas bases de dados dos serviços públicos. Na prática, ele deixou de ser mais um campo do cadastro e virou a chave de junção entre sistemas — o mesmo papel que a Carteira de Identidade Nacional consolida ao estampar o CPF como número do documento.

Para quem escreve software, três consequências. A primeira é de armazenamento: chave de junção nacional exige coluna de texto com onze posições, porque CPF que começa com zero perde o dígito em coluna numérica — e note que o zero da 10ª região fiscal está na nona posição, protegido, enquanto o zero à esquerda do número-base é o que some. A segunda é de integração: quanto mais sistemas cruzam dados pelo mesmo número, mais barato fica derivar atributos dele em vez de perguntar ao usuário. A terceira é a que este guia insiste: nada disso mudou a tabela de regiões nem transformou o nono dígito em informação de domicílio.

Por que não usar esse dígito em regra de negócio

O dígito diz onde o CPF foi emitido, não onde a pessoa nasceu, mora ou paga imposto. Quem tirou o CPF aos dezoito anos morando em Brasília e se mudou para Recife carrega o dígito 1 pelo resto da vida. O número não acompanha mudança de endereço.

O estrago costuma acontecer em dois tempos. Primeiro alguém escreve um script para preencher a coluna uf vazia de meio milhão de cadastros antigos a partir do CPF, e resolve a ambiguidade com um regiao.ufs[0]. Todo cliente com dígito 2 vira acreano, todo dígito 3 vira cearense, e o relatório regional do trimestre seguinte mostra o Acre como praça em ascensão. Depois, uma regra antifraude passa a pontuar divergência entre a UF do endereço e a região fiscal do CPF — e começa a barrar exatamente os clientes de sempre: quem mudou de estado, quem tirou o documento na infância em outra cidade e todo mundo que se inscreveu no exterior.

O antídoto é curto. UF de cliente se pergunta no formulário ou se deriva do endereço; o nono dígito serve para explicar o número, montar massa de teste e conferir se um gerador respeitou a região pedida. Ele é um indício fraco de origem do documento — parente do fato de que CPF válido não é CPF existente: o número passa no cálculo, mas isso não autoriza nenhuma conclusão sobre a pessoa por trás dele.

Gerando CPF por estado para testes

No sentido inverso, o dígito é útil e previsível: fixa-se o nono valor na região desejada e calculam-se os dois verificadores em cima da base resultante. É assim que o gerador de CPF permite escolher a região fiscal e que o gerador de pessoas mantém a ficha coerente — o CPF sai com o dígito da UF escolhida e o endereço cai na faixa de CEP daquele estado.

Um aviso sobre a massa produzida assim: sortear regiões uniformemente gera dez grupos do mesmo tamanho, distribuição que nenhuma base real tem. Se o objetivo é testar desempenho de índice ou de agrupamento por estado, vale ponderar o sorteio pela população que você espera atender, em vez de deixar o Acre com o mesmo peso de São Paulo.

Fontes e referências