Class: ActiveModel::Validations::CnpValidator

Inherits:
EachValidator
  • Object
show all
Includes:
EmptyBlankEachValidator
Defined in:
lib/active_model/validations/cnp_validator.rb

Constant Summary collapse

TEST_KEY =
"279146358279"

Instance Method Summary collapse

Methods included from EmptyBlankEachValidator

#validate_each

Instance Method Details

#valid?(cnp) ⇒ Boolean

Algoritm de validare CNP Pas preliminar: Se testeaza daca codul respecta formatul unui cod CNP. Adica prima cifra sa fie cuprinsa in intervalul 1 - 6 sau sa fie 9 pentru straini. Urmatoarele sase cifre trebuie sa constituie o data calendaristica valida in formatul AALLZZ.

Pas 1: Se foloseste cheia de testare “279146358279”. Primele douasprezece cifre se inmultesc pe rand de la stanga spre dreapta cu cifra corespunzatoare din cheia de testare.

Pas 2: Cele douasprezece produse obtinute se aduna si suma obtinuta se imparte la 11. Restul impartirii reprezinta cifra de control. Pentru un CNP valid acest rest va trebui sa coincida cu cifra de pe pozitia treisprezece din CNP-ul initial.

Returns:

  • (Boolean)


21
22
23
24
# File 'lib/active_model/validations/cnp_validator.rb', line 21

def valid?(cnp)
  return false unless well_formed?(cnp) && valid_birthdate?(cnp)
  (0..11).inject(0){|sum, n| sum += TEST_KEY[n].chr.to_i * cnp[n].chr.to_i} % 11 == cnp[12].chr.to_i
end