class GstinValidation

Public Class Methods

calculate_sum(gstin, mod, factor, sum, mod_chars_collection) click to toggle source
# File lib/gstin_validation.rb, line 16
def self.calculate_sum(gstin, mod, factor, sum, mod_chars_collection)
  gstin.reverse.each do |gstin_character|
    weight = -1
    mod_chars_collection.each_with_index { |mod_character, index| weight = index if gstin_character.eql? mod_character }
    digit = factor * weight
    factor = factor == 2 ? 1 : 2
    digit = (digit / mod) + (digit % mod)
    sum += digit
  end
  sum
end
validate_gstin_number(number) click to toggle source
# File lib/gstin_validation.rb, line 2
def self.validate_gstin_number(number)
  factor = 2
  sum = 0
  mod_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  checksum_digit = number[0..13]
  mod_chars_collection = mod_chars.chars
  gstin = checksum_digit.strip.upcase.chars
  mod = mod_chars_collection.length
  sum = calculate_sum(gstin, mod, factor, sum, mod_chars_collection)
  checksum_digit_index = (mod - (sum % mod)) % mod
  return true if mod_chars_collection[checksum_digit_index].eql? number[-1]
  false
end