class KonoUtils::FiscalCode::ControllaCF

Constants

AZ
LT
Z9

Public Class Methods

valid?(cf, strict = false) click to toggle source
# 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