4 MINDS

Sistema para Gestão de Conhecimento

Validação de CNPJ com Coffee Script





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