Method: ActiveModel::Validations::SirenValidator#valid_siren?

Defined in:
lib/active_validators/active_model/validations/siren_validator.rb

#valid_siren?(input) ⇒ Boolean

Validates siren format according to fr.wikipedia.org/wiki/SIREN

Returns:

  • (Boolean)


6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/active_validators/active_model/validations/siren_validator.rb', line 6

def valid_siren?(input)
  str = input.to_s
  reversed_array = str.split('').reverse

  digits = reversed_array.each_with_index.map do |char, i|
    coeff = (i % 2) + 1
    (char.to_i * coeff).to_s.split('')
  end

  sum = digits.flatten.map(&:to_i).inject(:+)

  (sum % 10) == 0
end