isValidCnpj = (cnpj) ->
if !cnpj
return false
cnpj = cnpj.replace(/[^\d]+/g,'')
if cnpj == ''
return false
if cnpj.length != 14
return false
invalidos = [
"00000000000000",
"11111111111111",
"22222222222222",
"33333333333333",
"44444444444444",
"55555555555555",
"66666666666666",
"77777777777777",
"88888888888888",
"99999999999999",
]
if cnpj in invalidos
return false
tamanho = cnpj.length - 2
numeros = cnpj.substring(0,tamanho)
digitos = cnpj.substring(tamanho)
soma = 0
pos = tamanho - 7
for i in [tamanho...0] by -1
soma += numeros.charAt(tamanho - i) * pos--
if pos < 2
pos = 9
resultado = if soma % 11 < 2 then 0 else 11 - soma % 11
if resultado != digitos.charAt(0)
return false;
tamanho = tamanho + 1
numeros = cnpj.substring(0,tamanho)
soma = 0
pos = tamanho - 7
for i in [tamanho...0] by -1
soma += numeros.charAt(tamanho - i) * pos--
if pos < 2
pos = 9
resultado = if soma % 11 < 2 then 0 else 11 - soma % 11
if resultado != digitos.charAt(1)
return false
return true