Sha256: 81a4ec74a77d8682b62b358c8aaae6c622e3b5414f9c6f1e4dc261cde85123ce

Contents?: true

Size: 1.17 KB

Versions: 9

Compression:

Stored size: 1.17 KB

Contents

require_relative "base"
require_relative "../commons/mod11"

module BrDocuments
  module IE
    class RN < Base
      include Commons::Mod11

      private
      def format_ie(number)
        if number.gsub(/(\.)|(\-)/, "").length == 9
          number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/, "\\1.\\2.\\3-\\4")
        else
          number.sub(/(\d{2})(\d{1})(\d{3})(\d{3})(\d{1})/, "\\1.\\2.\\3.\\4-\\5")
        end
      end

      def valid_format?
        valid_old_format or valid_new_format
      end

      def valid_old_format
        regex = /^(\d{2}\.\d{3}\.\d{3}\-\d{1})$|^(\d{9})$/
        regex.match(@number).present?
      end

      def valid_new_format
        regex = /^(\d{2}\.\d{1}\.\d{3}\.\d{3}\-\d{1})$|^(\d{10})$/
        regex.match(@number).present?
      end

      def valid_digital_check?
        @number.gsub!(/[\.\/-]/, "")

        weight = []
        @number.length.downto(2).each {|w| weight << w }

        @number[-1].eql? generate_digital_check(@number, weight).to_s
      end

      def generate_digital_check(values, weights)
        sum = reduce_weights(values, weights)
        mod = sum * 10 % 11
        mod == 10 ? 0 : mod
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
br_documents-0.1.3 lib/br_documents/ie/rn.rb
br_documents-0.1.2 lib/br_documents/ie/rn.rb
br_documents-0.1.1 lib/br_documents/ie/rn.rb
br_documents-0.1.0 lib/br_documents/ie/rn.rb
br_documents-0.0.15 lib/br_documents/ie/rn.rb
br_documents-0.0.14 lib/br_documents/ie/rn.rb
br_documents-0.0.13 lib/br_documents/ie/rn.rb
br_documents-0.0.12 lib/br_documents/ie/rn.rb
br_documents-0.0.11 lib/br_documents/ie/rn.rb