Class: ActiveModel::Validations::CnpValidator
- Inherits:
-
EachValidator
- Object
- EachValidator
- ActiveModel::Validations::CnpValidator
- Includes:
- EmptyBlankEachValidator
- Defined in:
- lib/active_model/validations/cnp_validator.rb
Constant Summary collapse
- TEST_KEY =
"279146358279"
Instance Method Summary collapse
-
#valid?(cnp) ⇒ Boolean
Algoritm de validare CNP Pas preliminar: Se testeaza daca codul respecta formatul unui cod CNP.
Methods included from EmptyBlankEachValidator
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.
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 |