Mam w Ruby generator NIP, który wygląda tak (sekwencja dla FactoryGirl):
sequence :nip do |n|
srand(n)
sum = 10
nip = []
while sum == 10
nip = Array.new(9) { rand(10) }
sum = nip.zip([6, 5, 7, 2, 3, 4, 5, 6, 7]).map{|a| a.inject(&:*)}.inject(&:+) % 11
end
(nip << sum).join
end
Jednak nie zawsze zwraca mi to poprawny numer, dlaczego? Co jest tutaj źle?
Funkcja sprawdzająca wygląda tak:
def nip_valid?(nip)
if nip =~ /^\d{10}$/
nums = nip.split(//).map(&:to_i)
check = nums.pop
sum = nums.zip([6, 5, 7, 2, 3, 4, 5, 6, 7]).map{|a| a.inject(&:*)}.inject(&:+)
return sum % 11 == check
else
false
end
end
// EDIT: trochę poprawiłem