Validação de CNPJ com Ruby

Rotina para validar um CNPJ usando Ruby.

def check_cnpj(cnpj=nil)
  return false if cnpj.nil?

  winvalidos = %w{11111111111111 22222222222222 33333333333333 44444444444444 55555555555555 66666666666666 77777777777777 88888888888888 99999999999999 00000000000000}
  wvalor = cnpj.scan /[0-9]/
  if wvalor.length == 14
    unless winvalidos.member?(wvalor.join)
      wvalor = wvalor.collect{|x| x.to_i}
      wsoma = wvalor[0]*5+wvalor[1]*4+wvalor[2]*3+wvalor[3]*2+wvalor[4]*9+wvalor[5]*8+wvalor[6]*7+wvalor[7]*6+wvalor[8]*5+wvalor[9]*4+wvalor[10]*3+wvalor[11]*2
      wsoma = wsoma - (11*(wsoma/11))
      wresult1 = (wsoma==0 || wsoma==1) ? 0 : 11 - wsoma
      if wresult1 == wvalor[12]
        wsoma = wvalor[0]*6+wvalor[1]*5+wvalor[2]*4+wvalor[3]*3+wvalor[4]*2+wvalor[5]*9+wvalor[6]*8+wvalor[7]*7+wvalor[8]*6+wvalor[9]*5+wvalor[10]*4+wvalor[11]*3+wvalor[12]*2
        wsoma = wsoma - (11*(wsoma/11))
        wresult2 = (wsoma == 0 || wsoma == 1) ? 0 : 11 - wsoma
        return true if wresult2 == wvalor[13] # CNPJ validado
      end
    end
  end
  return false # CNPJ invalidado
end

Queremos saber sua opinião