Module: Vss

Defined in:
lib/vss.rb

Overview

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

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_sirenObject



50
51
52
# File 'lib/vss.rb', line 50

def self.generate_siren
  complete_for_luhn_checksum(generate_digits(7))
end

.generate_siretObject



54
55
56
# File 'lib/vss.rb', line 54

def self.generate_siret
  complete_for_luhn_checksum(generate_digits(12))
end

.generate_vatObject



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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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