From: Wally Terrible Date: 2008-01-06T10:40:29+09:00 Subject: Pushing things Arrays ------=_Part_15199_27477307.1199583634435 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I've been learning Ruby and have done a couple of the quizes on the rubyquiz.com web site and written a couple of my own. Recently, I was surfing and stumbled on Graham King's credit card generator < http://www.darkcoding.net/projects/credit-card-generator/> He included several versions including PHP, Python and Java, but not Ruby. I thought it would be a good exercise translating it into Ruby and started working on it. What I thought would be an exercise that would take a couple of hours has now taken a few days, and I'm stumped. The problem involves the arrays used to hold the prefixes for the different cards. For some reason the program changes the original prefix so if a prefix is called that was called before it uses the entire randomly selected number. --snip-- American Express ---------------- 345258182650083 377822445136536 3778224451365361 3452581826500839 34525818265008392 Discover -------- 6011448520213005 60114485202130056 601144852021300560 Diners Club / Carte Blanche --------------------------- 30232254153565 30032768147008 38878817351526 --snip-- I think the part that is causing problems is in here: def completed_number(prefix, len) newCcnumber = [] newCcnumber = prefix len = len # generate digits while newCcnumber.length < (len - 1) ran = rand(9) newCcnumber.push(ran).to_s end #reverse number reversedCCnumber = newCcnumber.reverse #calculate sum sum = 0 pos = 0 while pos < (len - 1) odd = (reversedCCnumber[pos].to_i) * 2 if odd > 9 odd -= 9 end sum = sum + odd; if pos != (len - 2) sum = sum + (reversedCCnumber[pos +1]).to_i end pos += 2 end #calculate check digit checkdigit = (((sum/10) + 1) * 10 - sum) % 10 newCcnumber.push(checkdigit) newCcnumber = newCcnumber.to_s+"\n" end I don't really want a full solution to this problem, since I started it as a learning exercise. What I would like is a push in the right direction. What am overlooking? Am I way off on this problem or is it just something simple that I'm missing? amexPrefixList = [ ['3', '4'], ['3', '7'] ] discoverPrefixList = [ ['6', '0', '1', '1'] ] dinersPrefixList = [ ['3', '0', '0'], ['3', '0', '1'], ['3', '0', '2'], ['3', '0', '3'], ['3', '6'], ['3', '8'] ] ------=_Part_15199_27477307.1199583634435--