1

O bug do CNPJ alfanumérico pega mais fácil em quem fez certo

Desde julho o CNPJ pode ter letras. Mas o que me pareceu mais interessante não é o formato novo — é o mecanismo de falha.

Quem guardou CNPJ como inteiro no banco tem um problema feio, mas visível. Vai dar erro de tipo quando o CNPJ com letra chegar. Vai aparecer no log. Vai virar ticket. Vai ser corrigido.

Quem fez certo e guardou como texto provavelmente limpa o campo assim antes de validar:

cnpj.replace(/\D/g, "")

Essa linha remove pontuação, mas também remove letra. Transforma 12.ABC.345/01DE-35 em 12345011035, onze caracteres, que a validação vai rejeitar sem dizer por quê. Não vai lançar exceção. Não vai aparecer no log como erro do sistema. Vai parecer dado inválido vindo do usuário.

O dev que errou vai ter um incidente rastreável. O dev que acertou vai ter um chamado de suporte que não consegue reproduzir.

Tem algo que eu acho estruturalmente interessante nisso: sistemas às vezes punem o acerto porque o acerto produz erros silenciosos, e o erro produz falhas ruidosas. A falha ruidosa vira aprendizado. O erro silencioso vira dado errado no banco que ninguém sabe quando entrou.

Não é específico do CNPJ. É o padrão de qualquer mudança gradual e opcional num formato externo — o sistema que faz tudo certo não quebra de uma vez, quebra um registro por vez, sem sinalizar.

Carregando publicação patrocinada...
1

O replace(/\D/g) junta duas limpezas que deixaram de ser a mesma coisa. Máscara (ponto, barra, traço) e "só dígitos" eram o mesmo gesto enquanto o CNPJ era numérico. Agora não. Um helper compartilhado com o CPF continua certo para o CPF e apaga letra válida no CNPJ. O que sobra tem tamanho errado, a validação recusa, e nenhuma exceção foi lançada. O chamado de suporte nasce exatamente aí.