Module: Vss
- Defined in:
- lib/vss.rb
Overview
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
Constant Summary collapse
- VERSION =
'1.0.1'.freeze
- REGEXPS =
{ SIREN: /^\d{9}$/, SIRET: /^\d{14}$/, VAT: /^FR\d{11}$/, formatSIREN: /(\d\d\d\B)/, formatSIRET: /^(\d{3})(\d{3})(\d{3})(\d{5})$/, formatVAT: /^([A-Z]{2})(\d{2})(\d{3})(\d{3})(\d{3})$/ }.freeze
Class Method Summary collapse
- .format_siren(siren) ⇒ Object
- .format_siret(siret) ⇒ Object
- .format_vat(vat) ⇒ Object
- .generate_siren ⇒ Object
- .generate_siret ⇒ Object
- .generate_vat ⇒ Object
-
.siren?(siren) ⇒ Boolean
Return TRUE if the SIREN is valid.
-
.siret?(siret) ⇒ Boolean
Return TRUE if the SIRET is valid.
-
.to_siren(string) ⇒ Object
Convert a SIREN / SIRET / VAT to a SIREN.
-
.to_vat(string) ⇒ Object
Convert a SIREN / SIRET / VAT to a VAT.
-
.vat?(vat) ⇒ Boolean
Return TRUE if the VAT is valid.
Class Method Details
.format_siren(siren) ⇒ Object
62 63 64 65 66 |
# File 'lib/vss.rb', line 62 def self.format_siren(siren) return unless siren?(siren) siren.gsub(REGEXPS[:formatSIREN], '\1 ') end |
.format_siret(siret) ⇒ Object
68 69 70 71 72 |
# 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) ⇒ Object
74 75 76 77 78 |
# 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 ⇒ Object
50 51 52 |
# File 'lib/vss.rb', line 50 def self.generate_siren complete_for_luhn_checksum(generate_digits(7)) end |
.generate_siret ⇒ Object
54 55 56 |
# File 'lib/vss.rb', line 54 def self.generate_siret complete_for_luhn_checksum(generate_digits(12)) end |
.generate_vat ⇒ Object
58 59 60 |
# File 'lib/vss.rb', line 58 def self.generate_vat to_vat(generate_siren) end |
.siren?(siren) ⇒ Boolean
Return TRUE if the SIREN is valid
16 17 18 |
# File 'lib/vss.rb', line 16 def self.siren?(siren) siren.is_a?(String) && match?(REGEXPS[:SIREN], siren) && luhn_valid?(siren) end |
.siret?(siret) ⇒ Boolean
Return TRUE if the SIRET is valid
21 22 23 |
# 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) ⇒ Object
Convert a SIREN / SIRET / VAT to a SIREN
31 32 33 34 35 36 37 |
# 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) ⇒ Object
Convert a SIREN / SIRET / VAT to a VAT
40 41 42 43 44 45 46 47 48 |
# 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) ⇒ Boolean
Return TRUE if the VAT is valid
26 27 28 |
# File 'lib/vss.rb', line 26 def self.vat?(vat) vat.is_a?(String) && match?(REGEXPS[:VAT], vat) && valid_vat?(vat) end |