module Vss
French VAT / SIRET / SIREN numbers validation and generation as described here: fr.wikipedia.org/wiki/Syst%C3%A8me_d%27identification_du_r%C3%A9pertoire_des_%C3%A9tablissements#Calcul_et_validit.C3.A9_d.27un_num.C3.A9ro_SIRET
Constants
- REGEXPS
- VERSION
Public Class Methods
format_siren(siren)
click to toggle source
# File lib/vss.rb, line 62 def self.format_siren(siren) return unless siren?(siren) siren.gsub(REGEXPS[:formatSIREN], '\1 ') end
format_siret(siret)
click to toggle source
# File lib/vss.rb, line 68 def self.format_siret(siret) return unless siret?(siret) siret.gsub(REGEXPS[:formatSIRET], '\1 \2 \3 \4') end
format_vat(vat)
click to toggle source
# File lib/vss.rb, line 74 def self.format_vat(vat) return unless vat?(vat) vat.gsub(REGEXPS[:formatVAT], '\1 \2 \3 \4 \5') end
generate_siren()
click to toggle source
# File lib/vss.rb, line 50 def self.generate_siren complete_for_luhn_checksum(generate_digits(7)) end
generate_siret()
click to toggle source
# File lib/vss.rb, line 54 def self.generate_siret complete_for_luhn_checksum(generate_digits(12)) end
generate_vat()
click to toggle source
# File lib/vss.rb, line 58 def self.generate_vat to_vat(generate_siren) end
siren?(siren)
click to toggle source
Return TRUE if the SIREN is valid
# File lib/vss.rb, line 16 def self.siren?(siren) siren.is_a?(String) && match?(REGEXPS[:SIREN], siren) && luhn_valid?(siren) end
siret?(siret)
click to toggle source
Return TRUE if the SIRET is valid
# File lib/vss.rb, line 21 def self.siret?(siret) siret.is_a?(String) && match?(REGEXPS[:SIRET], siret) && luhn_valid?(siret) end
to_siren(string)
click to toggle source
Convert a SIREN / SIRET / VAT to a SIREN
# File lib/vss.rb, line 31 def self.to_siren(string) return string if siren?(string) return string[0..8] if siret?(string) return string[4..-1] if vat?(string) nil end
to_vat(string)
click to toggle source
Convert a SIREN / SIRET / VAT to a VAT
# File lib/vss.rb, line 40 def self.to_vat(string) return string if vat?(string) siren = siret?(string) ? to_siren(string) : string return unless siren?(siren) key = vat_key(siren) "FR#{format('%02d', key)}#{siren}" end
vat?(vat)
click to toggle source
Return TRUE if the VAT is valid
# File lib/vss.rb, line 26 def self.vat?(vat) vat.is_a?(String) && match?(REGEXPS[:VAT], vat) && valid_vat?(vat) end
Private Class Methods
complete_for_luhn_checksum(string)
click to toggle source
# File lib/vss.rb, line 119 def self.complete_for_luhn_checksum(string) rest = 10 - luhn_checksum(string) % 10 a = rest / 3 b = rest > 2 ? rest - 2 * a : rest "#{string}#{a}#{b}" end
generate_digits(length)
click to toggle source
# File lib/vss.rb, line 115 def self.generate_digits(length) format("%0#{length}d", rand(10**(length - 1))) end