Pular para o conteúdo
Documentos

Por que cada estado tem uma regra de inscrição estadual

Publicado em · Atualizado em · 6 min de leitura · Equipe Gerador Brasil

Cada estado tem a sua regra porque a inscrição estadual é um número do cadastro de contribuintes de cada Secretaria da Fazenda, e não existe um padrão nacional. Os tamanhos vão de 8 a 14 dígitos e as contas variam do módulo 11 ao módulo 9. Por isso, o sistema precisa guardar a UF junto da inscrição e validar com a regra daquele estado.

Cada estado tem a sua regra de inscrição estadual porque o número vem do cadastro de contribuintes de cada Secretaria da Fazenda. O ICMS é um imposto estadual, e cada Sefaz criou o formato do seu cadastro. Não há um padrão nacional que as 27 UFs sigam.

Para o desenvolvedor, o resultado é prático: a inscrição só pode ser validada junto da UF. Para gerar números de cada estado e conferir o dígito pela regra da UF, use o gerador de inscrição por estado. Este texto explica a lógica por trás das diferenças e o que fazer no código.

Onde estão as regras oficiais?

Em cada Sefaz, e reunidas pelo Sintegra na página de conferência de inscrições estaduais, com um roteiro de crítica por UF. Esses roteiros são a fonte usada aqui. A mesma página avisa que a rotina de validação que oferece pode ficar defasada para formatos novos e recomenda que quem valida inscrição busque as fórmulas nas próprias Sefaz.

Em termos práticos: se a regra do seu sistema e o roteiro de uma UF divergirem, vale o que a Sefaz publica.

Quanto as regras diferem?

Muito. Pelo gerador do site, os tamanhos se distribuem assim:

Tamanho (dígitos) UFs
8 RJ
9 AL, AM, AP, CE, ES, GO, MA, MS, PA, PB, PI, RR, SC, SE
10 PR, RS
11 MT
13 AC, DF, MG
Mais de um tamanho BA (8 ou 9), PE (9 ou 14), RN (9 ou 10), RO (9 ou 14), SP (12, ou 13 com o P), TO (9 ou 11)

Em dígitos verificadores, 20 UFs têm um só e 7 têm dois (AC, BA, DF, MG, PE, PR e SP). O tamanho de 9 dígitos é o mais comum, mas a conta dentro dele varia, como se vê a seguir.

Que diferenças pegam o desenvolvedor?

A mesma conta em vários estados. Os estados de 9 dígitos que usam a regra comum (módulo 11, pesos de 9 a 2) formam uma família. O número 672605740, gerado para o Piauí, passa na conta de sete UFs: AM, CE, ES, PB, PI, SC e SE. Se o seu sistema valida sem olhar a UF, ele aceita uma inscrição que o estado informado talvez nunca emita. Já o 247260577, gerado para Roraima, passa só na conta de Roraima, que usa outra regra.

O módulo muda. Roraima divide por 9, e não por 11. Os pesos são as posições de 1 a 8, e o dígito é o próprio resto. No roteiro, o exemplo 24006153-6 dá soma 105 e resto 6.

Dois módulos no mesmo número. Minas Gerais calcula o primeiro dígito por módulo 10 e o segundo por módulo 11. O roteiro manda inserir um zero depois do código do município (os três primeiros dígitos), multiplicar os dígitos alternadamente por 1 e 2 e somar os algarismos de cada produto, e não os produtos inteiros. O primeiro dígito é o que falta para a próxima dezena. O segundo é um módulo 11 comum, com pesos de 2 a 11.

A regra depende do próprio número. Na Bahia, o primeiro dígito (8 dígitos) ou o segundo (9 dígitos) decide se a conta é módulo 10 ou módulo 11. Quando esse dígito é 0, 1, 2, 3, 4, 5 ou 8, a conta é módulo 10; quando é 6, 7 ou 9, é módulo 11, segundo o roteiro.

O dígito não fica no fim. Em São Paulo, os dígitos verificadores ocupam a 9ª e a 12ª posições, e o produtor rural tem um formato próprio, com a letra P. A página da ferramenta resolve o exemplo paulista passo a passo.

Como fica a conta de Minas Gerais e de Roraima em código?

As duas funções abaixo foram executadas no Node com os exemplos dos roteiros: 062.307.904/0081 em Minas e 24006153-6 em Roraima.

// Minas Gerais: 11 dígitos de base (município + número + ordem) e 2 dígitos de controle
function dvsMG(base11) {
  // D1: insere um 0 depois dos 3 primeiros dígitos, pesos 1 e 2 alternados,
  // soma os ALGARISMOS dos produtos; D1 é o que falta para a próxima dezena
  const comZero = base11.slice(0, 3) + '0' + base11.slice(3);
  let algarismos = 0;
  [...comZero].forEach((c, i) => {
    const produto = Number(c) * (i % 2 === 0 ? 1 : 2);
    algarismos += Math.floor(produto / 10) + (produto % 10);
  });
  const d1 = (10 - (algarismos % 10)) % 10;

  // D2: módulo 11 sobre a base + D1, pesos 2 a 11 da direita para a esquerda
  const doze = base11 + d1;
  const soma = [...doze].reverse().reduce((t, c, i) => t + Number(c) * (2 + (i % 10)), 0);
  const resto = soma % 11;
  const d2 = resto < 2 ? 0 : 11 - resto;
  return { algarismos, d1, soma, resto, d2 };
}

// Roraima: módulo 9, pesos 1 a 8 da esquerda para a direita
function dvRR(base8) {
  const soma = [...base8].reduce((t, c, i) => t + Number(c) * (i + 1), 0);
  return { soma, dv: soma % 9 };
}

console.log(dvsMG('06230790400'));
// { algarismos: 32, d1: 8, soma: 219, resto: 10, d2: 1 }
console.log(dvRR('24006153'));
// { soma: 105, dv: 6 }

O roteiro de Minas não diz o que fazer no primeiro dígito quando a soma já é uma dezena exata. A função acima devolve 0 nesse caso, que é o que o gerador do site faz. Se o seu cadastro depender desse caso, confirme com a Sefaz-MG.

O que o seu sistema deve fazer?

  • Guardar a UF em coluna própria, ao lado da inscrição, e exigi-la na validação.
  • Usar coluna de texto com pelo menos 14 caracteres. Rondônia e a inscrição antiga de Pernambuco têm 14 dígitos, e o produtor rural paulista tem uma letra.
  • Preservar zeros à esquerda: vários estados têm inscrições que começam com zero.
  • Tratar o caso de empresa sem inscrição. Muitos cadastros usam a palavra ISENTO, e o seu sistema precisa decidir o que ela significa.
  • Validar mais do que a conta. Estados como Goiás, Maranhão e Pará exigem prefixos, e uma conta certa com prefixo errado não é emitida por esses estados.

Como testar sem usar inscrição de empresa real?

Gere números por UF e, para o teste negativo, gere também números com dígito errado, tamanho errado e inscrição de outro estado. Combine a inscrição com um CNPJ e com uma chave de acesso de NF-e da mesma UF para exercitar o cadastro de fornecedor e a entrada de nota.

A inscrição sorteada não existe em cadastro nenhum, e um número assim pode coincidir com o de uma empresa real. Por isso ele não identifica ninguém: serve só para testar software. A situação de uma empresa, se ativa ou não, só a Sefaz do estado informa.

Para começar, escolha a UF no gerador de inscrição estadual, gere a lista e baixe em CSV, JSON ou SQL.

Números fictícios, apenas para teste de software. Eles são sorteados no seu navegador e seguem a regra do dígito verificador, mas não vêm de nenhum cadastro. Usar documento falso para enganar alguém é crime.
Dúvidas

Perguntas frequentes

Existe uma regra única de inscrição estadual para o Brasil?

Não. Cada Secretaria da Fazenda define o formato, os pesos e os dígitos verificadores da sua inscrição. O Sintegra reúne os roteiros de conferência de todas as UFs, e o próprio Sintegra recomenda buscar as fórmulas nas Sefaz.

Dá para validar inscrição estadual sem saber a UF?

Não com segurança. Um mesmo número de 9 dígitos pode passar na conta de vários estados ao mesmo tempo, e o sistema aceitaria uma inscrição que o estado informado jamais emitiria.

Que tipo de coluna usar para a inscrição estadual?

Texto, com pelo menos 14 caracteres, junto de uma coluna de UF. Há inscrições de 8 a 14 dígitos, algumas começam com zero e a de produtor rural de São Paulo tem a letra P no começo.

Fontes

Blog

Leia também

Ferramenta

Veja também

Atualizado em 14/11/2026.