O fato da inclusão de letras no CNPJ estar programada apenas para 2026 mas já termos uma biblioteca suportando essa nova versão é incrível.
Mas tenho uma dúvida, como você lidou com a validação disso? Quero dizer, teria como validar um CNPJ com letras hoje, da mesma forma que se valida um CNPJ numérico por meio do dígito verificador?
Talvez seja até uma sugestão para implementação futura.
A forma de validação que foi feita no pacote consegue validar ambos os cenários sem nenhuma intervenção, seja o CNPJ com apenas números (versão 1) quanto o CNPJ que possui alfanuméricos (versão 2).
No pacote o único momento que se faz necessário especificar a versão é caso queira gerar um CNPJ, nesse caso o default é a versão 1, mas é possível informar que deseja usar a versão com alfanuméricos.
No arquivo de testes do CNPJ eu criei cenários para validar ambos os casos.
Veja um exemplo de teste para o CNPJ na versão com dígitos:
t.Run("Should return no error if CNPJ is valid", func(t *testing.T) {
// Arrange
input := "59.541.264/0001-03"
sut := cnpj.New()
// Act
res := sut.IsValid(input)
// Assert
if res != nil {
t.Errorf("Expected no error, got %v", res)
}
})
Agora outro cenário com o CNPJ contendo alfanuméricos:
t.Run("Should return no error if CNPJ with letters is valid", func(t *testing.T) {
// Arrange
input := "12.ABC.345/01DE-35"
sut := cnpj.New()
// Act
res := sut.IsValid(input)
// Assert
if res != nil {
t.Errorf("Expected no error, got %v", res)
}
})
Veja que a implementação e o uso do pacote é igual independente se recebeu um CPNJ na versão antiga ou na nova.