Class: KonoUtils::FiscalCode::ControllaCF

Inherits:
Object
  • Object
show all
Defined in:
lib/kono_utils/fiscal_code.rb

Defined Under Namespace

Classes: CaseError, EmptyString, InvalidLength

Constant Summary collapse

LT =
[[1, '0'], [0, '1'], [5, '2'], [7, '3'], [9, '4'], [13, '5'], [15, '6'], [17, '7'], [19, '8'], [21, '9'], [1, 'A'], [0, 'B'], [5, 'C'], [7, 'D'], [9, 'E'], [13, 'F'], [15, 'G'], [17, 'H'], [19, 'I'], [21, 'J'], [2, 'K'], [4, 'L'], [18, 'M'], [20, 'N'], [11, 'O'], [3, 'P'], [6, 'Q'], [8, 'R'], [12, 'S'], [14, 'T'], [16, 'U'], [10, 'V'], [22, 'W'], [25, 'X'], [24, 'Y'], [23, 'Z']]
Z9 =
('0'..'9').to_a
AZ =
('A'..'Z').to_a

Class Method Summary collapse

Class Method Details

.valid?(cf, strict = false) ⇒ Boolean

Returns:

  • (Boolean)

Raises:



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/kono_utils/fiscal_code.rb', line 14

def self.valid?(cf, strict = false)
  cf = cf.to_s
  raise EmptyString.new("codice fiscale non può essere lasciato in bianco") if cf.empty?
  raise InvalidLength.new("codice fiscale dev'essere composto da 16 caratteri alfanumerici") if cf.size != 16
  if strict==true && cf != cf.upcase;
    raise CaseError.new("i caratteri del codice fiscale devono essere maiuscoli");
  else
    cf.upcase!
  end;
  s = (0..14).collect { |i| (i&1)!=0 ? ([Z9.include?(cf[i, 1]) ? cf[i, 1].to_i : AZ.index(cf[i, 1]), cf[i, 1]]) : LT.rassoc(cf[i, 1]) }
  s.include?(nil) ? false : AZ.at((s.transpose[0].inject(0) { |t, n| t+n })%26) == cf[-1, 1]
end