class KonoUtils::FiscalCode::ControllaPI

Constants

NU

Public Class Methods

valid?(pi) click to toggle source
# File lib/kono_utils/fiscal_code.rb, line 37
def self.valid?(pi)
  pi = pi.to_s
  raise EmptyString.new("partita iva non può essere lasciata in bianco") if pi.empty?
  raise InvalidLength.new("partita iva dev'essere composta da 11 cifre") if pi.size != 11
  s = (0..9).collect { |i| NU.include?(pi[i, 1]) ? ((i&1)!=0 ? (pi[i, 1].to_i > 4 ? ((pi[i, 1].to_i*2) - 9) : pi[i, 1].to_i * 2) : pi[i, 1].to_i) : nil }
  r = s.include?(nil) ? false : ((s.inject(0) { |t, n| t+n }) % 10)
  r != false && (r==0 ? r : 10-r) == pi[-1, 1].to_i
end