Validando o CUIT Argentino: Algoritmo, Formato e API
Teste — valide um CUIT
A validação roda no seu navegador. Nenhum dado sai do seu dispositivo.
Valida localmente — seus dados nunca saem do seu navegador. Sem tracking no input.
O CUIT (Clave Unica de Identificacion Tributaria) é o identificador fiscal universal da Argentina, emitido pela AFIP (agora ARCA). Se você está desenvolvendo um sistema de faturamento, um fluxo de onboarding para empresas argentinas ou uma integração com a AFIP, validar o CUIT corretamente é um dos primeiros problemas que você vai precisar resolver. Este guia cobre a estrutura, os prefixos, o algoritmo do dígito verificador com um exemplo completo resolvido e como validar CUITs em produção usando a API da Normadata.
O que é o CUIT
O CUIT é o número de identificação fiscal da Argentina, equivalente ao RFC no México ou ao EIN nos Estados Unidos. Aparece em faturas, declarações fiscais, registros em cartórios públicos e transações bancárias. Toda empresa registrada na Argentina tem um CUIT, e pessoas físicas que trabalham formalmente também recebem um. Ao contrário do DNI (identidade nacional), o CUIT inclui um prefixo de tipo e um dígito verificador, o que permite validá-lo matematicamente sem consultar nenhum banco de dados externo.
O CUIL (Clave Unica de Identificacion Laboral) usa exatamente o mesmo formato e algoritmo que o CUIT. A diferença é administrativa: o CUIL é usado em sistemas de trabalho e previdência social, o CUIT no sistema fiscal. Para fins de validação, são idênticos.
Estrutura do CUIT
Um CUIT tem 11 dígitos escritos no formato XX-XXXXXXXX-X, dividido em três partes:
- Prefixo (2 dígitos): indica o tipo de entidade
- Corpo (8 dígitos): o DNI da pessoa ou um número atribuído pela AFIP para empresas
- Dígito verificador (1 dígito): calculado com o algoritmo módulo 11
Prefixos válidos: 20 (pessoa física masculina), 23 (masculino alternativo), 24 (masculino segundo alternativo), 27 (pessoa física feminina), 30 (empresa / entidade jurídica), 33 (entidade jurídica alternativo), 34 (entidade jurídica segundo alternativo). Prefixos alternativos (23, 24, 33, 34) existem para casos onde o prefixo primário produz um dígito verificador de 10, que o algoritmo considera inválido.
O algoritmo módulo 11
O dígito verificador do CUIT é calculado usando módulo 11. Veja como funciona:
- Escreva os primeiros 10 dígitos do CUIT (prefixo + corpo).
- Atribua os pesos [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] a cada posição.
- Multiplique cada dígito pelo seu peso correspondente.
- Some todos os produtos.
- Calcule o resto: soma mod 11.
- Subtraia de 11: verificador = 11 - (soma mod 11).
- Se o resultado for 11, o dígito verificador é 0.
- Se o resultado for 10, o CUIT é inválido para aquele prefixo (a AFIP reemite com um prefixo alternativo).
Exemplo resolvido com 20-31456789-?. Dígitos: 2, 0, 3, 1, 4, 5, 6, 7, 8, 9. Pesos: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2. Produtos: 10, 0, 9, 2, 28, 30, 30, 28, 24, 18. Soma: 179. 179 mod 11 = 3. 11 - 3 = 8. O CUIT completo é 20-31456789-8.
Armadilhas comuns
Estes são os problemas mais frequentes em integrações reais:
- Tratar CUIT como inteiro — Zeros à esquerda no corpo são eliminados. Sempre armazene e transmita como strings.
- Não normalizar separadores — Sistemas armazenam CUITs com hífens, sem hífens, com espaços ou com pontos. Sempre remova caracteres não numéricos antes de validar.
- Assumindo que prefixo 20 = masculino e 30 = empresa — Prefixos alternativos (23, 24, 33, 34) são válidos e comuns. Não rejeite um CUIT simplesmente porque seu prefixo não é 20 ou 30.
- Não tratar o resultado 10 — Se o algoritmo produzir 10 como verificador, o CUIT é inválido para aquele prefixo; 10 não é o dígito verificador.
- Confundir CUIT com CUIL — Validam de forma idêntica, mas existem em sistemas administrativos separados.
Validando CUIT com a API da Normadata
Em vez de implementar o algoritmo manualmente, é possível validar CUITs com uma única chamada de API à Normadata. A API normaliza a entrada, verifica o formato e o checksum, e retorna metadados estruturados incluindo o tipo de entidade e o valor formatado.
curl -X POST https://api.normadata.io/v1/validate/tax-ids \
-H "X-API-Key: nd_your_key_here" \
-H "Content-Type: application/json" \
-d {
"value": "20-31456789-8",
"country": "AR",
"type": "cuit"
}import requests
response = requests.post(
"https://api.normadata.io/v1/validate/tax-ids",
headers={"X-API-Key": "nd_your_key_here"},
json={
"value": "20-31456789-8",
"country": "AR",
"type": "cuit"
}
)
data = response.json()
print(data["valid"]) # True{
"valid": true,
"country": "AR",
"type": "cuit",
"value": {
"raw": "20314567898",
"formatted": "20-31456789-8"
},
"metadata": {
"prefix": "20",
"entity_type": "persona_fisica_masculino",
"dni": "31456789",
"check_digit": "8"
}
}Próximos passos
Agora que você entende a estrutura e o algoritmo do CUIT, pode integrá-lo ao seu fluxo de onboarding, sistema de faturamento ou pipeline de compliance. A API da Normadata cobre não apenas o CUIT, mas também o CUIL, o CBU e outros identificadores argentinos, mais IDs fiscais de 8 outros países sul-americanos pelo mesmo endpoint consistente. Veja a cobertura completa em /coverage ou entre na lista de espera em /waitlist para obter acesso à API.