Sha256: e54dbb1a38349491cfcbf60630146a31ee7b31bbbc7ed096e94ec87fc06ad1e1

Contents?: true

Size: 1.26 KB

Versions: 7

Compression:

Stored size: 1.26 KB

Contents

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

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

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

      def valid_format?
        valid_old_format or valid_new_format
      end

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

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

      def valid_digital_check?
        valid_old_digital_check or valid_new_digital_check
      end

      def valid_old_digital_check
        weight = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
        remove_mask!
        @number[-1].eql? generate_digital_check(@number[-6, 6], weight).to_s
      end

      def valid_new_digital_check
        weight = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
        remove_mask!
        @number[-1].eql? generate_digital_check(@number, weight).to_s
      end

      def remove_mask!
        @number.gsub!(/[\.\/-]/, "")
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

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