Here is one for cities....
http://www.realestate3d.com/gps/uslatlongdegmin.htm
(partial)
I tried looking for a zip code database... but they all cost money. I actually found a comma delimited text file for 14.95 (sounds like a TV commercial), that has Zip code with longituted and latititude.
BTW. This is sorta related. I found a cool database (NeoGeo) that if you give it an IP address, it will give you the Longitute and Latitude, of that IP. I though it was cool... anyway good luck!
Oh last note... this is another algorithm I thought of. It would require a lot of research. I am pretty sure that the zip code is like the ip address instead of describing a net and subnets etc... the first digit describes like what area of the country the person is in (NW NE S W etc...), the next two digits narrow it down some more and the final 2 digits tell where in the city they are located. So if you could get a database of that kind of stuff (which would actually be smaller I think.) Then you wouldnt have to worry with longititude and lat. Here is where I found some of that info:
http://www.usps.com/history/history/his2_75.htm#ZIP
Hope this Helps!