module SaVatValidation
Constants
- VERSION
Public Class Methods
first_digit(a)
click to toggle source
# File lib/sa_vat_validation.rb, line 36 def self.first_digit(a) a.to_s.chars.first.to_i end
last_digit(a)
click to toggle source
# File lib/sa_vat_validation.rb, line 32 def self.last_digit(a) a.to_s.chars.last.to_i end
valid?(vat_number)
click to toggle source
# File lib/sa_vat_validation.rb, line 5 def self.valid?(vat_number) digits = vat_number.to_s.split(//).map(&:to_i) # As per SARS # A VAT Number is a unique number, which comprises of 10 digits and starts with the number 4 return false unless digits.first == 4 return false unless digits.size == 10 && vat_number.to_s.is_numeric? check_digit = digits.pop sum = 0 digits.each_with_index do |digit, i| if i.even? result = digit * 2 result = first_digit(result) + last_digit(result) if result >= 10 sum += result else sum += digit end end calculated_digit = last_digit(sum).zero? ? last_digit(sum) : 10 - last_digit(sum) check_digit == calculated_digit end