Sha256: 2e38e9d163a462770336c90fd462acec09ca0072ea2c3b394e7bca165e560bcf
Contents?: true
Size: 1.77 KB
Versions: 1
Compression:
Stored size: 1.77 KB
Contents
# frozen_string_literal: true class CPF require "cpf_cnpj" require "cpf/formatter" require "cpf/verifier_digit" attr_reader :number, :strict REGEX = /\A\d{3}\.\d{3}\.\d{3}-\d{2}\Z/.freeze VALIDATION_SIZE_REGEX = /^\d{11}$/.freeze NUMBER_SIZE = 9 DENYLIST = %w[ 00000000000 11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 12345678909 ].freeze def self.format(number) new(number).formatted end def self.valid?(number, strict: false) new(number, strict).valid? end def self.generate(formatted = false) number = CpfCnpj::Generator.generate(NUMBER_SIZE, VerifierDigit) cpf = new(number) formatted ? cpf.formatted : cpf.stripped end def initialize(number, strict = false) @number = number.to_s @strict = strict end def number=(number) @stripped = nil @formatted = nil @numbers = nil @number = number end def stripped @stripped ||= Formatter.strip(number, strict) end def formatted @formatted ||= Formatter.format(number) end def valid? if strict && !(number.match?(REGEX) || number.match?(VALIDATION_SIZE_REGEX)) return false end return false unless stripped.match?(VALIDATION_SIZE_REGEX) return false if DENYLIST.include?(stripped) digits = numbers[0...NUMBER_SIZE] digits << VerifierDigit.generate(digits) digits << VerifierDigit.generate(digits) digits[-2, 2] == numbers[-2, 2] end def number_without_verifier numbers[0...NUMBER_SIZE].join end def ==(other) super || (other.instance_of?(self.class) && other.stripped == stripped) end alias eql? == private def numbers @numbers ||= stripped.each_char.to_a.map(&:to_i) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cpf_cnpj-0.6.0 | lib/cpf.rb |