Class: KonoUtils::FiscalCode::ControllaCF
- Inherits:
-
Object
- Object
- KonoUtils::FiscalCode::ControllaCF
- 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
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 |