class Valvat::Checksum::GB
Constants
- GOV_NUMBER
- HEALTH_NUMBER
- NEW_FORMAT_FORBIDDEN_RANGES
- OLD_FORMAT_FORBIDDEN_RANGES
Public Instance Methods
validate()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 11 def validate # rubocop:disable Metrics/CyclomaticComplexity # government departments and health authorities, so no checksum return true if gov_or_health? return false if all_zero? return false if old_format_remainder.zero? && fobidden_in_old_format? return false if new_format_remainder.zero? && fobidden_in_new_format? old_format_remainder.zero? || new_format_remainder.zero? end
Private Instance Methods
all_zero?()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 36 def all_zero? str_wo_country =~ /\A0{9}\Z/ || str_wo_country =~ /\A0{12}\Z/ end
checksum()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 24 def checksum @checksum ||= str_wo_country[7..8].to_i end
fobidden_in_new_format?()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 56 def fobidden_in_new_format? vat_base_int = vat_base.to_i NEW_FORMAT_FORBIDDEN_RANGES.any? { |range| range.include?(vat_base_int) } end
fobidden_in_old_format?()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 61 def fobidden_in_old_format? vat_base_int = vat_base.to_i OLD_FORMAT_FORBIDDEN_RANGES.any? { |range| range.include?(vat_base_int) } end
gov_or_health?()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 32 def gov_or_health? str_wo_country =~ GOV_NUMBER || str_wo_country =~ HEALTH_NUMBER end
new_format_remainder()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 52 def new_format_remainder @new_format_remainder ||= (vat_base_sum + 55 + checksum).modulo(97) end
old_format_remainder()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 48 def old_format_remainder @old_format_remainder ||= (vat_base_sum + checksum).modulo(97) end
vat_base()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 28 def vat_base @vat_base ||= str_wo_country[0..6] end
vat_base_sum()
click to toggle source
# File lib/valvat/checksum/gb.rb, line 40 def vat_base_sum @vat_base_sum ||= vat_base.split('') .map(&:to_i) .zip([8, 7, 6, 5, 4, 3, 2]) .map { |vat_number_digit, multiplier| vat_number_digit * multiplier } .inject(:+) end